Git快进合并提交与从侧分支cherry-pick的最终结果有差异吗?
结论
两种策略最终生成的dev分支Git历史完全没有区别。
原因分析
你提到的两种合并策略,前置处理步骤完全一致:
- 先把侧分支的所有开发提交
squash为单个独立提交 - 基于最新的
dev分支执行rebase,解决所有冲突,此时侧分支上仅有的那个squash提交的父节点,就等于当前dev分支HEAD指向的提交
接下来的两种合并操作,最终对dev分支的修改效果完全一致:
- cherry-pick操作:当你切到
dev分支后,cherry-pick那个squash提交时,由于当前dev的HEAD就是该提交的父节点,Git会直接把该提交追加到dev分支末端,不会生成新的提交记录,提交哈希、提交信息、父节点关联和原侧分支的squash提交完全一致。 - 快进合并操作:由于rebase后的侧分支提交链完全领先于
dev分支,不存在分叉,执行快进合并时Git不会生成额外的合并提交,只会把dev分支的HEAD指针直接移动到侧分支的squash提交位置,最终dev上的提交记录和cherry-pick的结果没有任何差异。
两种操作最终都会在dev上得到线性、无多余合并提交的整洁历史,最终的提交链、每个提交的哈希值完全相同。
内容的提问来源于stack exchange,提问作者Nir O.
相关产品推荐
相关产品推荐

