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

时间:2018-10-05 01:06:36

标签: git

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

...语法在内部执行git merge-base master HEAD,例如:

git diff master...HEAD

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

git diff master:./

是否可以同时使用..../?我已经尝试过了:

git diff master..../

但是它不起作用。

更新:

也许不可能,因为不支持git merge-base master ./,尽管我希望它在内部执行git merge-base master HEAD

1 个答案:

答案 0 :(得分:1)

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

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

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

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

在上述类似的简单情况下,上述git rev-parse的输出是三个哈希ID:右侧的ID,合并基数的ID和左侧的ID(取反)。 (如果存在多个合并基础,则所有合并基础都位于RHS和否定的LHS之间。)

git diff内部,这些相同的提交哈希ID按相同的顺序显示在数组中(下标零表示非否定的RHS)。差异代码注意到存在多个正引用和一个最终否定引用,并在两个提交哈希ID上运行git diff:从中间合并的基数之一,在下标0处的非否定哈希ID。< / p>

由于索引和工作树都没有提交ID,因此git diff无法将它们提供给修订解析代码。这意味着相同的代码块不能返回包含三个以上元素的数组,最后一个元素标记为“取反”。

Git 可以,但没有完全不同的代码来处理。但是,由于它只是一种方便的语法,因此您可以自己进行操作:

git diff $(git merge-base master HEAD)

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