如何将...
语法与./
工作树语法一起使用。
...
语法在内部做一个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)
将master
和HEAD
的合并基(或一个随机选择的合并基,在多个碱基的情况下(与当前工作树进行比较,或添加--cached
以将同一合并基与索引进行比较。