是吉特坏了还是我们做错了什么?;-)
我们发现,git存储库的最新版本中有一个文件发生了更改,我试图弄清楚这是什么时候在使用whatchanged
这怎么可能:

$ git checkout 27773b72432e86d308d25d666663f237e50aa3fd Tools/foo.php
$ md5sum Tools/foo.php
85552061cae9832c11eb6607ac88e3d8 Tools/foo.php
$ git checkout master Tools/foo.php
$ md5sum Tools/foo.php
f38f51232785a432af2d1bd8db4429ed  Tools/foo.php

但是:
$ git whatchanged 27773b72432e86d308d25d666663f237e50aa3fd..master  | grep foo.php
# empty result

怎么会这样?

最佳答案

简而言之,你可能想尝试使用

git whatchanged master..27773b72432e86d308d25d666663f237e50aa3fd

(确实,您应该使用git log来代替它,但这与它为什么没有达到您的预期无关。)
以下是一些有助于理解原因的信息:
正如其他用户所建议的那样,这种表示法并不意味着“从(但不包括)27773b72432e86d308d25d666663f237e50aa3fd..master开始到(包括)27773b7结束的一系列提交”。有时会减少到这个程度,但这不是它的意思。(你马上就会明白为什么区别很重要。)
它的意思是,“所有可以从master访问但不能从master访问的提交”。(其中“可达”是指通过父指针。)
如果我们假设你的提交图看起来像
 .... 27773b7 -- A -- B -- C <--(master)

然后这将减少到其他人已经确定的“范围”类型。但那样的话,你就不会遇到问题了。这是因为您已经显示了27773b7处的文件与27773b7C)处的文件不同,这意味着masterAB必须已更改它。如果你的提交图是那样的。
所以我们可以得出结论,你的提交图不是这样的。
另一种可能是
--- o -- A -- 27773b7 -- x ...
     \
      B -- C <--(master)

在这个图中,C只是指27773b7...masterB,因为C无法通过A访问master,虽然o可以通过master访问27773b7,但也可以通过27773b7访问。
现在有可能文件在A处不同的原因是它被27773b727773b7^本身更改了。在这两种情况下,使用A..B(如其他答案所示)都没有帮助。
这让我回到了我的观点:如果你真的想把A符号看作是定义一个范围,那么这个范围的开始不能被认为是A;如果有什么不同的话,你会希望它是BB之间的合并基(如果有的话);有时它可能只是As提交层次结构的根,只有当A可以从B访问A..B时,它才等于B..A。无论如何,你不能假设它是一个线性的提交范围。
但是,了解它真正指示的提交图的子集可以更清楚地看到,如果没有显示任何内容,您可能需要尝试。

08-27 11:53