许多 git 工作流提倡使用git merge --no-ff将功能分支引入主线。我个人更喜欢git rebase -i我的功能分支到一个干净的提交中,然后对其进行简单的 git 合并。
以这种方式使用 rebase -i 而不是 merge --no-ff 用于功能分支有什么缺点吗?
许多 git 工作流提倡使用git merge --no-ff将功能分支引入主线。我个人更喜欢git rebase -i我的功能分支到一个干净的提交中,然后对其进行简单的 git 合并。
以这种方式使用 rebase -i 而不是 merge --no-ff 用于功能分支有什么缺点吗?
使用merge --no-ff
, 创建一个新的提交,将合并分支的每个 HEAD(最后一次提交)作为父级,在您的情况下:“主线”的最后一次提交和“功能”分支的最后一次提交。这会让 git 记住“功能”分支历史是合并提交历史的一部分。
历史与merge
,合并的提交*
有两个分支 HEAD 作为父级:
mainline ---------*
/
feature -------/
使用rebase -i
,新提交不会在重新提交的父级列表中包含“功能”分支的 HEAD,因此存储库将丢失提交的先前历史记录。
历史rebase
,重新定位的提交*
只有一个“主线” HEAD 作为父级:
mainline --------*
feature --------
请记住,没有引用的提交会被垃圾收集。如果您使用“rebase -i”,它不会创建引用(因为它不作为父级包含在 rebase 提交中),并且如果“功能”分支被删除,该历史将最终被修剪(完全如果您的存储库周围没有其他引用,则由垃圾收集器删除)。