使用三向diff来进行比较。

5

另一个S.O.问题展示了如何配置git在合并冲突时使用三路差异。

是否可以将这种三路样式设置为标准差异操作的默认值?如果我请求两个版本之间的差异,其中存在一个共同的根(不仅是这些版本中的一个),则会在差异中显示从共同根开始的更改。

1个回答

8
我很抱歉,答案是否定的。之所以这样说是因为无论您在调用git diff时如何指定参数,它始终只考虑两个实体(大多数情况下从引用它们的提交中推断出的blob或tree)。
换句话说,这是设计上的: git diff考虑单独的对象,不进行任何历史遍历。引用git diff手册页面:
“要获取拼写<commit>的更完整列表,请参阅gitrevisions(7)中的“指定修订版本”部分。但是,“diff”是关于比较两个端点而不是范围,并且范围符号("<commit>..<commit>"和"<commit>...<commit>")并不意味着“SPECIFYING RANGES”部分中定义的范围。”
另一方面,通过适当的shell,您应该能够自己做到这一点。例如,给定两个提交,rev1rev2,您可以使用以下命令:
git-diff3() {
  local rev1="$1" rev2="$2"
  diff3 <(git show "$rev1") \
        <(git show $(git merge-base "$rev1" "$rev2")) \
        <(git show "$rev2")
}

在一个能理解 <(...)(例如 bash)的 shell 中。
这个函数需要改进才能更加有用/稳定。

谢谢你提供如此全面的答案。我可能会尝试一下。 - Benjohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接