为什么git merge会自动删除主分支已有代码行,如何触发合并冲突?
Git合并时自动删除主分支代码行的原因及冲突触发方案
自动删除主分支代码行的原因
你的操作场景符合Git默认三方合并的自动合并规则:
- 你从main分支新建feature分支时,两个分支的共同祖先提交中,
demo_file的内容为四行:one、two、three、four - 后续feature分支仅对该文件做了删除第四行four的修改,未改动其他内容
- 切回main分支后,你没有对
demo_file做任何修改,直接执行合并操作
Git合并时会对比共同祖先、当前分支(main)、待合并分支(feature)三个版本的文件差异:由于main分支的demo_file和共同祖先版本完全一致,只有feature分支做了明确的删除修改,Git会判定该删除是需要保留的有效变更,因此直接将删除操作应用到合并结果中,不会触发冲突。
触发合并冲突提示的操作方案
你可以通过以下三种方式实现需求:
方案1:单次合并时指定严格合并规则
执行合并命令时添加参数,强制触发更严格的冲突检测:git merge -X conflict=diff3 -X no-renormalize feature该命令会让Git展示三方差异(共同祖先、main分支、feature分支),只要两个分支相对于共同祖先存在修改差异,就会标记冲突,不会自动应用单分支的修改。
方案2:全局配置默认合并规则
执行全局配置命令,让后续所有合并操作默认采用严格冲突判定:git config --global merge.conflictStyle diff3 git config --global merge.renormalize false配置完成后,只要待合并分支和当前分支相对于共同祖先存在同一区域的修改差异,就会触发冲突提示,而非自动合并。
方案3:合并前修改main分支的对应文件
只要在合并feature分支之前,对main分支的demo_file做任意修改(比如调整第四行的行尾格式、添加空格、修改内容等),Git对比三方版本时会发现两个分支都对同一区域做了修改,就会自动触发冲突提示。
内容的提问来源于stack exchange,提问作者Umar Alfaruq
相关产品推荐
相关产品推荐

