如何伪造两个不相关分支的初始合并

How to fake an initial merge of two unrelated branches

我们正在使用 git-tfs 从 TFS VC 迁移。然而,由于我们分支的性质(一些分支是通过复制文件夹而不是通过分支创建的),我们无法迁移所有 TFVC 历史记录。因此,我们迁移的分支不共享相同的基础。

为了简化问题,这是我们目前的情况:

我可以 运行 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

现在分支是相关的。