为什么“ git log-foo”对删除的文件foo不起作用?


89

我的存储库进行了以下更改:

  1. ...一些无关的提交...
  2. 提交foo包含100行内容的新文件
  3. ...中间的提交,其中一些涉及foo...
  4. 将内容插入foo现有文件的顶部bargit rm foo进行相同的提交
  5. ...更多无关的提交...

现在,我想查看已删除文件的日志foo。我读过的所有内容(包括SO内容)都说我应该能够git log -- foo,但是该命令不会产生任何输出。

如果我发现foo可以删除的提交,可以git log 1234abcd -- foo查看它的日志,所以我认为这foo不是问题所在。还要注意git merge-base HEAD 1234abcd输出1234abcd[...],所以我认为应该证明提交是可以到达的HEAD。请注意,foo我的工作树中没有文件(显而易见,因为它已被删除)。在OS X上使用Git 1.7.1.1。

为什么git log -- foo对我不起作用,我该如何解决?谢谢!


5
您尝试过git log --follow -- foo还是git log --follow -M -- foo?(以强制重命名检测)
VonC 2010年

1
废话,我确实尝试过- --follow但是读到,history我看到自从cd在其他地方试过以来,使路径无效。 git log --follow -- foo当我从正确的起点尝试时,它就可以工作。我猜的Git的轧foobar为某种命名的?无论如何,谢谢!如果您将其重新发布为答案,我们将很乐意为您提供帮助。
user385804

1
烦人的问题标题--变成了
卡斯卡贝尔

Answers:


118

您想使用--followon上的选项git log,该选项在手册页中描述为:

Continue listing the history of a file beyond renames.

实际上,这不仅使您可以查看重命名文件的历史记录,而且还可以使您不再在工作树中查看文件的历史记录。因此,您应使用的命令应类似于:

git log --follow -- foo

更新:

Git 2.9+现在默认为所有git diffgit log命令启用了此功能:

面向最终用户的“ git diff”和“ git log”系列中的瓷器级别命令默认启用重命名检测;您仍然可以使用“ diff.renames”配置变量来禁用此功能。

感谢x-yuri的注意!


1
它对我没有任何影响--follow。我只需要添加--。我在跑步git-2.9.0
x-yuri
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.