如何伪造两个不相关分支的初始合并
How to fake an initial merge of two unrelated branches
我们正在使用 git-tfs
从 TFS VC 迁移。然而,由于我们分支的性质(一些分支是通过复制文件夹而不是通过分支创建的),我们无法迁移所有 TFVC 历史记录。因此,我们迁移的分支不共享相同的基础。
为了简化问题,这是我们目前的情况:
- 我们 TFVC 服务器中的两个分支,
qc
和 release
。
- git 中相同的两个分支,但作为不相关的分支
- 如果今天在 TFVC 我想从
qc
合并到 release
,它会显示 5 个更改的文件
- 但是,我无法在 git 中从
qc
合并到 release
,因为分支不相关。
我可以 运行 git merge qc --no-commit --no-ff --allow-unrelated-histories
并解决冲突。那很好用。但是,我需要先创建一个只有 "connects" 分支的初始合并,然后执行 git merge qc
并查看相同的 5 个更改文件,具有相同的差异。
原因是我们仍在运行宁git-tfs
同步。开发人员需要习惯 git(他们一直在使用 TFVC,所以现在他们正在学习它)。在某个时候我们将停止同步,开始使用 git 服务器。这就是为什么我们需要 "fake" 分支之间的历史记录,或者进行不包含这 5 个文件的大合并,然后进行另一次合并以显示与 TFVC 中完全相同的差异。
提前致谢!
结帐qc
。将这五个麻烦的文件复制到别处。签出 release
中的 5 个文件,从而在 qc
中覆盖它们,因此它们在两个分支中都是相同的。添加并提交。
现在结帐 release
并进行合并。
现在再次检查qc
并将五个有问题的文件复制回原处,用有问题的内容覆盖它们。添加并提交。
现在再次结帐 release
,然后再次合并,根据需要解决。
一个答案已经被批准,但您可能还考虑过重写 child
分支的第一次修订历史,以便它指向它开始的 parent
分支的任何修订.类似于:
git checkout first-revision-child-branch
# working in detached HEAD
git reset soft revision-of-parent-branch-where-child-branch-was-copoed-from
git commit -m 'first revision of child branch's
# replicate all the revisions of the child branch
git cherry-pick first-revision-of-child-branch..child-branch
# if you like the result
git branch -f child-branch
git checkout child-branch
现在分支是相关的。
我们正在使用 git-tfs
从 TFS VC 迁移。然而,由于我们分支的性质(一些分支是通过复制文件夹而不是通过分支创建的),我们无法迁移所有 TFVC 历史记录。因此,我们迁移的分支不共享相同的基础。
为了简化问题,这是我们目前的情况:
- 我们 TFVC 服务器中的两个分支,
qc
和release
。 - git 中相同的两个分支,但作为不相关的分支
- 如果今天在 TFVC 我想从
qc
合并到release
,它会显示 5 个更改的文件 - 但是,我无法在 git 中从
qc
合并到release
,因为分支不相关。
我可以 运行 git merge qc --no-commit --no-ff --allow-unrelated-histories
并解决冲突。那很好用。但是,我需要先创建一个只有 "connects" 分支的初始合并,然后执行 git merge qc
并查看相同的 5 个更改文件,具有相同的差异。
原因是我们仍在运行宁git-tfs
同步。开发人员需要习惯 git(他们一直在使用 TFVC,所以现在他们正在学习它)。在某个时候我们将停止同步,开始使用 git 服务器。这就是为什么我们需要 "fake" 分支之间的历史记录,或者进行不包含这 5 个文件的大合并,然后进行另一次合并以显示与 TFVC 中完全相同的差异。
提前致谢!
结帐qc
。将这五个麻烦的文件复制到别处。签出 release
中的 5 个文件,从而在 qc
中覆盖它们,因此它们在两个分支中都是相同的。添加并提交。
现在结帐 release
并进行合并。
现在再次检查qc
并将五个有问题的文件复制回原处,用有问题的内容覆盖它们。添加并提交。
现在再次结帐 release
,然后再次合并,根据需要解决。
一个答案已经被批准,但您可能还考虑过重写 child
分支的第一次修订历史,以便它指向它开始的 parent
分支的任何修订.类似于:
git checkout first-revision-child-branch
# working in detached HEAD
git reset soft revision-of-parent-branch-where-child-branch-was-copoed-from
git commit -m 'first revision of child branch's
# replicate all the revisions of the child branch
git cherry-pick first-revision-of-child-branch..child-branch
# if you like the result
git branch -f child-branch
git checkout child-branch
现在分支是相关的。