为什么“git log-foo”不适用于已删除的文件foo?

时间:2010-07-07 17:47:49

标签: git git-log

我的存储库经历了以下更改:

  1. ......一些不相关的提交......
  2. 使用100行内容提交新文件foo
  3. ......干预提交,其中一些提交foo ...
  4. 在同一提交中将foo的内容插入现有文件bargit rm foo的顶部
  5. ...更多不相关的提交......
  6. 现在我想查看已删除文件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不适合我,我该如何解决?谢谢!

1 个答案:

答案 0 :(得分:117)

您想使用--follow上的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的抬头!