如何合并两个具有相似提交但没有共同祖先的分支?

How to merge two branches with some similar commits and no common ancestor?

我有一个包含两个分支的存储库,masterfront_end_dev。我的一位同事从 master 创建了 front_end_dev 分支,他们共享提交历史,但历史是分开的,分支是分开了。如下图所示:

MASTER            m1 -- m2 -- m3 -- m4 -- m5 -- m6 -- m7 -- m8 -- m9

FRONT_END_DEV     m1 -- m2 -- m3 -- m4 -- m5 -- f1 -- f2 -- f3 -- f4

例如,前五个提交在两个分支中是相同的,但随后的历史就不同了。然而,这些分支并不是由一个共同的祖先连接起来的。我将如何合并 front_end_devmaster and/or 变基 front_end_dev 所以它正确地分支了最后一个共享提交?

据我了解,master 上的提交 mifront_end_dev 上的提交 mi 具有相同的更改 (i = 1, ..., 5) ,但他们有不同的散列,因为你说历史是分开的。

变基

git checkout front_end_dev
git rebase master

这将使 front_end_dev 变基于 master。您会将所有这些提交排列在 front_end_dev 上(m1 - m9 后跟 m1 - m5 - f1 - f4)。由于两个分支上的 mi 提交具有相同的更改,因此此 rebase 会产生很多冲突。一旦你解决了那些痛苦的冲突,你就可以快进到 master:

git checkout master
git merge front_end_dev

合并

git checkout master
git merge front_end_dev

这是最简单也可能是最好的选择。您只需生成一个合并提交并解决冲突。

变基 f1-f4

如果您真的确定提交 mi (i = 1, ..., 5) 在两个分支上包含相同的更改,您可能只想将提交 f1-f4 变基到 master .

git checkout <hash-commit-f1> # checkout to commit f1
git checkout -b branch_with_fi # create a branch from commit f1
git merge frond_end_dev # add commits f2, f3 and f4 to the new branch

现在您可以变基或合并新分支:

git rebase master

git checkout master
git merge branch_with_fi