如何将...
语法和./
工作树语法一起使用。
...
语法在内部执行git merge-base master HEAD
,例如:
git diff master...HEAD
./
语法与工作树进行比较,例如:
git diff master:./
是否可以同时使用...
和./
?我已经尝试过了:
git diff master..../
但是它不起作用。
更新:
也许不可能,因为不支持git merge-base master ./
,尽管我希望它在内部执行git merge-base master HEAD
。
答案 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)
比较master
和HEAD
的合并基数(或在多个基数的情况下一个随机选择的合并基数)与当前工作树,或将--cached
添加到将相同的合并库与索引进行比较。