另一个S.O. question显示如何配置git
以使用三向差异进行合并冲突。
是否可以将此三种样式设置为标准差异操作的默认样式?如果我在存在共同根目录的版本之间请求差异(不仅仅是其中一个版本),那么来自共同根目录的更改将显示在差异中。
答案 0 :(得分:7)
我担心答案是否定的。
对此的ratonale是,无论你在调用git diff
时如何指定参数,它总是只考虑两个实体(blob或树(大多数时候从引用它们的提交中推断))。
换句话说,这是设计的:git diff
考虑单独的对象,不进行任何历史遍历。
引用git diff
手册页:
有关拼写
<commit>
的方法的更完整列表,请参阅“指定修订”gitrevisions(7)
中的部分。但是,“diff”是关于比较两个端点 不是范围,而是范围符号(“<commit>..<commit>
”和 “<commit>...<commit>
”)并不表示“指定范围”中定义的范围gitrevisions(7)
中的部分。
另一方面,使用合适的外壳,你应该能够自己做那件事。比方说,如果有两个提交,rev1
和rev2
,您可以使用
git-diff3() {
local rev1="$1" rev2="$2"
diff3 <(git show "$rev1") \
<(git show $(git merge-base "$rev1" "$rev2")) \
<(git show "$rev2")
}
在了解<(...)
的shell中(例如bash
)。
这个功能需要按摩才能使它更有用/更不易碎,但我希望你明白这一点。