2

许多 git 工作流提倡使用git merge --no-ff将功能分支引入主线。我个人更喜欢git rebase -i我的功能分支到一个干净的提交中,然后对其进行简单的 git 合并。

以这种方式使用 rebase -i 而不是 merge --no-ff 用于功能分支有什么缺点吗?

4

1 回答 1

1

使用merge --no-ff, 创建一个新的提交,将合并分支的每个 HEAD(最后一次提交)作为父级,在您的情况下:“主线”的最后一次提交和“功能”分支的最后一次提交。这会让 git 记住“功能”分支历史是合并提交历史的一部分。

历史与merge,合并的提交*有两个分支 HEAD 作为父级:

mainline  ---------*
                  /
feature   -------/

使用rebase -i,新提交不会在重新提交的父级列表中包含“功能”分支的 HEAD,因此存储库将丢失提交的先前历史记录。

历史rebase,重新定位的提交*只有一个“主线” HEAD 作为父级:

mainline  --------*

feature   --------

请记住,没有引用的提交会被垃圾收集。如果您使用“rebase -i”,它不会创建引用(因为它不作为父级包含在 rebase 提交中),并且如果“功能”分支被删除,该历史将最终被修剪(完全如果您的存储库周围没有其他引用,则由垃圾收集器删除)。

于 2013-09-27T18:11:50.773 回答