2010-07-07 101 views
86

我的仓库进行了修改,如:为什么“git log-foo”为删除的文件foo工作?

  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-07-07 18:05:04

+1

废话,我确实尝试了“ - followlow” - 但是阅读了“历史记录”,我看到自从我试过以后在其他地方进行cd操作,导致路径无效。当我从正确的起点尝试时,'git log --follow - foo'有效。我猜Git考虑将'foo'滚动到'bar'作为某种重命名? 无论如何,谢谢!如果您将其重新发布为答案,我很乐意将此信任。 – user385804 2010-07-07 18:27:56

+1

令人讨厌的是'--'在问题标题中被改为'-' ... – Cascabel 2010-07-07 18:39:16

回答

117

您想使用git log--follow选项,这是在手册页描述:

Continue listing the history of a file beyond renames. 

实际上,这不仅可以让你看到一个重命名的文件的历史,但是这也允许您不再在工作树中查看文件的历史记录。所以,你应该用命令应该是这个样子:

git log --follow -- foo 

更新:

的Git 2.9+已启用此默认为所有git diffgit log命令:

结束-user用户在默认的“git diff”和 “git log”系列中使用瓷级命令启用重命名检测;你仍然可以使用“diff.renames”配置变量来禁用它。

感谢x-yuri的高举!

+0

它对我没有'--follow'部分。我只需要添加'--'。我正在运行'git-2.9。0'。 – 2016-07-05 13:13:19

相关问题