将master合并到feature分支并解决冲突后,反向合并为何无冲突?
Git合并疑问解析:为何反向合并无冲突且触发快进?
场景回顾
先明确两次合并前后的提交历史:
合并master到feature_branch前:
master: A---B---C---F---G \ feature_branch: D---E
将master合并到feature_branch并解决冲突后,创建了合并提交M:
master: A---B---C---F---G \ \ feature_branch: D---E---M
为什么合并feature_branch回master是快进?
Git判断合并方式的核心逻辑是看目标分支是否已经被源分支完全包含:
- 当你要把feature_branch合并回master时,master当前指向提交G,而feature_branch的提交M的父节点之一就是G——这意味着G的所有变更都已经被包含在M的提交历史里了(M本身就是G和E的变更整合结果)。
- 对Git来说,master分支的所有内容都是feature_branch的子集,所以不需要做任何内容合并操作,直接把master的指针快进移动到M即可。
为什么不会再次遇到之前的冲突?
你之前的冲突是在整合C→G(master的新变更)和C→E(feature的变更)时产生的,而合并提交M已经永久记录了这次冲突的解决结果。
当反向合并时,Git识别到master的最新提交G是M的直接父节点,相当于已经确认「G的所有变更都已经被M吸收并完成整合」,不会再重复对比C之后的变更内容,自然不会触发相同冲突。
内容的提问来源于stack exchange,提问作者crooky m
相关产品推荐
相关产品推荐

