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

use*_*804 89 git git-log

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

  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适合我,我该如何解决?谢谢!

Nat*_*eyn 118

您希望使用--follow选项on git log,该选项在手册页中描述为:

Continue listing the history of a file beyond renames.
Run Code Online (Sandbox Code Playgroud)

实际上,这不仅可以让您查看重命名文件的历史记录,而且还允许您查看工作树中不再存在的文件的历史记录.所以你应该使用的命令应该类似于:

git log --follow -- foo
Run Code Online (Sandbox Code Playgroud)

更新:

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

默认情况下,"git diff"和"git log"系列中面向Porcelain级别命令的最终用户启用重命名检测; 你仍然可以使用"diff.renames"配置变量来禁用它.

感谢x-yuri的抬头!