使用三路 diff 进行 diff

2023-12-06

Another 所以。问题显示如何配置git使用三路差异来解决合并冲突。

是否可以将这种三向样式设置为标准 diff 操作的默认值?如果我请求存在公共根(不仅仅是版本之一)的版本之间的差异,则公共根的更改将显示在差异中。


恐怕答案是否定的。

这样做的理由是,无论您在调用时如何指定参数git diff,它总是只考虑两个实体(blob 或树(大多数时候从引用它们的提交推断))。

换句话说,这是设计使然的:git diff考虑单独的对象并且不进行任何历史遍历。引用git diff手册页:

有关拼写方法的更完整列表<commit>,参见“指定修订” 部分在gitrevisions(7)。然而,“diff”是关于比较两个端点,不是范围,以及范围符号 ("<commit>..<commit>" and "<commit>...<commit>“)并不表示“指定范围”中定义的范围 部分在gitrevisions(7).

另一方面,有了合适的 shell,您应该能够自己做那件事。假设有两次提交,rev1 and rev2,你可以使用

git-diff3() {
  local rev1="$1" rev2="$2"
  diff3 <(git show "$rev1") \
        <(git show $(git merge-base "$rev1" "$rev2")) \
        <(git show "$rev2")
}

在一个能够理解的 shell 中<(...) (e.g. bash).

此功能需要按摩以使其更有用/不那么脆弱。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用三路 diff 进行 diff 的相关文章

随机推荐