将旧分支合并到新分支或将新分支合并到旧分支

Merge old branch into new or new into old

我的 git 存储库目前有两个从 master 分支创建的功能分支。让我们将这两个功能分支称为 A 和 B。在创建 B 之前创建了 4 次提交。目前A和B几乎没有重叠,只有一个小的合并冲突。

因为业务排期的原因,再过45天不能将A和B合并到master中。随着我继续工作,我现在很难记住哪个分支包含哪些更改,我想将这两个分支合并为一个。 A合并B(旧的合并到新的)有什么优缺点?

git checkout B
git merge A

将B合并到A(新的合并到旧的)有什么优点和缺点?

git checkout A
git merge B

从代码的角度来看,这两种方法都会产生相同的结果,只要您在合并时做出相同的 merge-conflict 解析决策。

从阅读 git 历史的角度来看,将旧分支合并到新分支更有意义,因为您可以更轻松地跟踪提交日期,但这只是用户偏好。

我建议,由于管理妨碍您,将这两个分支合并为一个单独的临时第三个分支。

git checkout A # can checkout B as well
git checkout -b temporary-C-branch
git merge B # or A if you checked out B first. Also think about using --no-ff if you want a merge commit as well

这样您在合并时就不必 mess-up A 和 B。

the advantages and disadvantages

None。将 A 合并到 B 和将 B 合并到 A 只是两件事——两件不同的事情。他们之间没有选择;它们并不相互排斥(你可以两者都做,而且人们经常这样做),并且一个并不比另一个“更好”。你做你所做的,因为那是你想做的。

拓扑上的区别仅在于各个分支发生了什么以及哪个分支是“第一个父级”。

  • 如果你在A上,你将B合并到A中,那么B在合并提交之前就停止了;合并提交是在 A 上进行的, 仍在 A 上,并且 A 上的先前提交是合并提交的第一个父级(B 是它的第二个父级)。

  • 如果你在B上,你将A合并到B,那么正好相反:A在合并提交之前停止;合并提交是在 B 上进行的, 仍在 B 上,B 上的前一个提交是合并提交的第一个父级(A 是它的第二个父级)。

当然也有--ours--theirs的区别。这很重要,以防您选择一些在发生冲突时使用该区别的合并策略。然而,在所有其他条件相同的情况下,无论以何种“方式”执行合并,合并提交的内容都是完全相同的。