对于其他读者(以及来自这篇文章):
git 有一个以diff3
格式显示合并冲突的选项(默认情况下它只显示要合并的两个文件)。您可以像这样启用它:
git config --global merge.conflictstyle diff3
确实没有理由不启用 diff3 样式,因为您经常需要祖先来确定正确的合并是什么。
这是相当早(2008 年)引入的,我想它不是默认的,因为默认的 Unixdiff
不会显示为 3-way diff。
使用Git 2.35,您还拥有zdiff3
(" zealous diff3 ")。
如该线程中所述,如果您想在不设置配置的情况下运行此命令,以便您可以轻松地在普通 diff 和 diff3 之间切换,这在一种特定情况下是可能的:
如果在索引中标记了冲突(即,您在冲突合并之后但在将路径标记为已解决之前所处的状态),您可以执行以下操作:
git checkout --conflict=diff3 <path...>
请注意,这实际上是将索引内容检出到工作树中,因此您可能对冲突的工作树副本所做的任何编辑都将被覆盖。
请注意,|||||| merged common ancestors
它将随着 git 2.24(2019 年第四季度)的发展而发展
请参阅提交 b657047(2019 年 10 月 7 日)、提交 8e4ec33(2019 年 10 月 1 日)和提交 4615a8c、提交 45ef16f、提交 f3081da、提交 5bf7e57、提交 e95e481 、提交a779fb8、提交 8599ab4、提交 7c0a6c8、提交 c7fa、提交babab2687b ,提交 4d7101e ,提交 724dd76 ,提交 345480d ,提交 b4db8a2 ,提交 98a1d3d ,提交 9822175 ,提交 10f751c(2019 年 8 月 17 日),作者Elijah Newren ( newren
)。
(由Junio C Hamano 合并 -- gitster
--在提交 280bd44中,2019 年 10 月 15 日)
签字人:以利亚·纽伦
在提交 7ca56aa07619(“ merge-recursive
:为祖先添加标签”,2010-03-20,Git v1.7.1-rc0 -- merge)中,为 ' ||||||
' 行添加了一个标签,使其具有更多信息标题 ' |||||| merged common ancestors
',声明:
使用信息量更大的标签会更好。
也许有一天有人会提供一个。
当递归开始时,这个选择的标签是完全合理的,即当有多个合并基础时。
(在这种情况下,我想不出更好的标签。)
但是当有唯一的合并基础或没有合并基础时,它实际上有点误导。
根据合并基数更改此设置:
>=2: "merged common ancestors"
1: <abbreviated commit hash>
0: "<empty tree>"
还添加了测试以检查我们是否为这三种情况中的每一种都获得了正确的祖先名称。
在 Git 2.25(2020 年第一季度)中,“ git apply --3way
”学会了尊重merge.conflictStyle
配置变量,就像合并一样。
参见Denton Liu ( )的提交 091489d、提交 aa76ae4、提交 9580620、提交 b006968、提交 fa87b81(2019 年 10 月 23 日) 。(由Junio C Hamano 合并 -- --在eff313f 提交中,2019 年 11 月 10 日)Denton-L
gitster
apply
: 尊重 --3way 中的 merge.conflictStyle
签字人:Denton Liu
以前,在进行 3 路合并时,该merge.conflictStyle
选项不受尊重,并且merge
始终使用 " " 样式,即使diff3
指定了 " " 也是如此。
git_xmerge_config()
在结束时调用,git_apply_config()
以便读取 merge.conflictStyle 配置。