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

我的存储库进行了更改,如:

  1. 一些不相​​关的提交
  2. 用100行内容提交新文件foo
  3. …介入承诺,其中一些触摸foo
  4. foo的内容插入现有文件bar的顶部,并在相同的提交中将git rm foo插入
  5. …更无关的提交…

现在我想看看删除的文件foo的日志。 我读过的所有东西,包括SO,都说我应该可以用git log -- foo ,但是这个命令没有输出。

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

为什么不git log -- foo为我工作,我该如何解决它? 谢谢!

你想在git log上使用--follow选项,在手册页中描述为:

 Continue listing the history of a file beyond renames. 

实际上,这不仅允许您查看重命名文件的历史logging,还可以让您不再在工作树中查看文件的历史logging。 所以你应该使用的命令应该是这样的:

 git log --follow -- foo 

更新:

Git 2.9+现在默认启用了所有的git diffgit log命令:

在“git diff”和“git log”系列中面向Porcelain level命令的最终用户默认启用重命名检测; 你仍然可以使用“diff.renames”configurationvariables来禁用它。

感谢x-yuri的高举!