Git diff 与点斜杠工作树的三点对称符号



如何将...语法与./工作树语法一起使用。

...语法在内部做一个git merge-base master HEAD,例如:

git diff master...HEAD

./语法与工作树进行比较,例如:

git diff master:./

是否可以同时使用..../?我试过这个:

git diff master..../

但它不起作用。

更新:

也许这是不可能的,因为不支持git merge-base master ./,尽管我希望它在内部会做git merge-base master HEAD

(值得一提的是:这种特殊的合并基行为特定于git diff

这是不可能的,因为索引和工作树都不是提交。 合并基础计算是通过两个提交作为输入完成的。

更准确地说,git diff A...B使用与git rev-parse相同的代码解析A...B

$ git rev-parse origin/master...master
80b88a51c112215a56f0e73dab804c4e17248f3b
3afc4b6899bfb87ca3e397c62463fc9cdd070fb6
^3afc4b6899bfb87ca3e397c62463fc9cdd070fb6

上述git rev-parse的输出,在像上面这样的简单情况下,是三个哈希ID:右侧的哈希ID,合并基的哈希ID,以及否定的左侧哈希ID。 (如果有多个合并基,则它们都位于 RHS 和否定的 LHS 之间。

在内部git diff,这些相同的提交哈希ID以相同的顺序显示在数组中(下标零表示非否定的RHS(。 diff 代码注意到有多个正引用和一个最终否定引用,并在两个提交哈希 ID 上运行git diff:中间的一个合并基,以及下标零处的非否定哈希 ID。

由于索引和工作树都没有提交 ID,因此git diff无法将它们提供给修订解析代码。 这意味着同一代码块不能返回具有三个或更多元素的数组,最后一个元素标记为"否定"。

Git可以,但没有,有完全不同的代码来处理这个问题。 但由于它只是一个方便的语法,你可以自己做:

git diff $(git merge-base master HEAD)

masterHEAD的合并基(或一个随机选择的合并基,在多个碱基的情况下(与当前工作树进行比较,或添加--cached以将同一合并基与索引进行比较。

最新更新