Git Merge:conflictStyle的diff3与merge模式差异及原理
Git Merge默认算法与Diff3的差异及工作原理
Git合并冲突时,merge.conflictStyle配置决定了冲突内容的展示形式,可选值为默认的merge和diff3。很多人会发现diff3有时会生成范围更大的冲突块,本文将明确两者的算法差异,并解释默认merge算法的工作原理。
示例对比
基础文件(Base)
1 2 3
本地修改文件(Yours)
1 change1 change2 input1OnlyChange1 change3 change4 change5 change6 input1OnlyChange2 change7 change8 change9 2 3
远端修改文件(Theirs)
1 change1 change2 input2OnlyChange1 change3 change4 change5 change6 input2OnlyChange2 change7 change8 change9 2 3
默认merge模式的冲突结果
生成2处独立的冲突标记:
1 change1 change2 <<<<<<< HEAD input1OnlyChange1 ======= input2OnlyChange1 >>>>>>> input2 change3 change4 change5 change6 <<<<<<< HEAD input1OnlyChange2 ======= input2OnlyChange2 >>>>>>> input2 change7 change8 change9 2 3
diff3模式的冲突结果
仅生成1处大范围冲突标记:
1 <<<<<<< HEAD change1 change2 input1OnlyChange1 change3 change4 change5 change6 input1OnlyChange2 change7 change8 change9 ||||||| 0fcee2c ======= change1 change2 input2OnlyChange1 change3 change4 change5 change6 input2OnlyChange2 change7 change8 change9 >>>>>>> input2 2 3
算法差异与默认merge原理
两者都基于三路合并逻辑(以Base为基准,对比Yours和Theirs的修改),但冲突块的划分逻辑有核心区别:
默认merge算法工作原理
- 先分别对比Base与Yours、Base与Theirs,定位出各自的修改区间。
- 当两个修改区间不重叠但相邻/接近时,算法会进一步对比Yours和Theirs在修改区间外的内容:如果存在连续的匹配内容,就会把冲突范围拆分到最小的独立差异点,生成多个小冲突块。
- 本质是在三路合并的基础上,增加了“冲突拆分”的逻辑,尽量缩小冲突范围,只保留真正有差异的行,方便用户逐个解决。
Diff3算法逻辑
- 直接定位Base中被Yours和Theirs共同修改的连续整体区间,只要两端的修改属于同一变更上下文,即使中间有大量相同内容,也会把整个区间包裹成一个冲突块。
- 会在冲突块中插入Base的原始内容(
|||||||标记部分),帮助用户理解修改的上下文,但不会拆分相邻的独立差异点,因此冲突范围通常更大。
示例差异的原因
示例中Base的2和3之间为空,Yours和Theirs都在该区域插入了一整段内容,仅两处行不同:
- 默认merge算法识别到这两处差异是独立的,周围内容完全一致,因此将冲突拆分成两个小块;
- Diff3则把整个插入区间视为Base被修改的连续范围,因此将整段内容包裹成一个大冲突块,同时展示Base的空原始内容。
测试脚本(PowerShell)
rm -Force -r ./repo -ErrorAction Ignore mkdir ./repo cd ./repo git init # git config merge.conflictStyle diff3 cp ../../base.txt content.txt git add *; git commit -m first git branch base git checkout -b input2 cp ../../input2.txt content.txt git add *; git commit -m input2 git checkout base cp ../../input1.txt content.txt git add *; git commit -m input1 git merge input2
内容的提问来源于stack exchange,提问作者Henning
相关产品推荐
相关产品推荐

