Git怪没有历史


88

当我在文件上运行git blame(使用msysgit)时,总是得到以下打印输出:

00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   1) package co
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   2) {
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   3)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   4)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   5)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   6)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   7)      impor

即,它将所有行显示为“尚未提交”。

我在许多提交多次的文件上都尝试过-总是相同的结果。我也尝试过使用相对路径/完整路径,但这似乎没有什么区别。

当我尝试使用TortoiseGit的责任时,它总是将每行显示为在第一次提交时最后提交:

替代文字

甚至我已经说过,这些文件的历史记录中实际上有数十个提交。

有想法吗?

编辑-更多信息

  • Git blame在托管此仓库的GitHub上运行良好。
  • 如果我将其克隆到linux机器并在那里怪罪,它也可以正常工作
  • 似乎仅在msysgit上这不起作用

对我而言,此问题是由于使用符号链接路径(与存储库可识别的路径相对应)导致的,因此认为该文件是全新的。
卡扎伊2012年

注意:从git 2.0.1(2014年6月25日)开始,git blame应该停止报告所有那些“尚未提交”行。请参阅下面的答案
VonC 2014年


这也会影响WSL,因此我添加了标签。希望没事。
mikemaccana

Answers:


126

git blame file.txt在工作副本中指责file.txt的版本。如果file.txt在存储库中具有Windows换行符(CRLF),而您具有core.autocrlf = true,则file.txt的每一行都将被视为不同,并且将由git blame尚未提交报告。

之所以起作用git blame <my_branch>(甚至更好git blame HEAD,无论您在哪个分支上都起作用),是因为它没有责怪工作副本版本,因此没有潜在的行尚未提交。


117
git blame -w忽略空格,因此,如果需要,您仍然可以责怪工作副本
Kyle Heironimus 2012年

13
Git怪-w应该是一个单独的答案,应该被接受;)。接受的没有评论的答案对我毫无用处。
Guillaume Perrot

55

找到了解决方案-很奇怪。

如果我运行此命令:

git blame file.txt

如上所述,历史记录已被破坏。

如果我改为这样做:

git blame my_branch file.txt

有用!

这很奇怪,因为AFAICS的用法不需要​​分支名称:

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file

7
这对我有用,谢谢您的发布。您应该将此标为IMO。
韦斯

这对我在msysgit中有效,但文件名区分大小写。所以我可以写git blame mybranch cmakelists.txt,它将失败;但是如果我写的git blame mybranch CMakeLists.txt话就可以了。
2012年

我同意,我们 直到我指定分支,才怪没有显示任何历史记录,这与文档不一致。
josephdpurcell


8

从git 2.0.1(2014年6月25日)开始,git blame应该停止报告所有这些“尚未提交”行。

参见brian m。的commit 4d4813a(2014年4月26日)。卡尔森(bk2204
(通过合并JUNIOÇ滨野- gitster-提交e934c67,2014年6月6日)

blame:正确处理文件,无论 autocrlf

如果文件包含以CRLF结尾的存储库中的行结尾core.autocrlf=input,则Not Committed Yet即使行未经修改,也总是将行标记为“ ”。
创建伪提交时,请勿尝试转换行尾,以免责怪正确地工作,无论autocrlf设置如何。


8
我仍然在git v2.1.3中
遇到

我有git版本2.16.1.windows.1的问题
Radon8472 '19

@ Radon8472是否可以添加一个新问题来说明问题,并提供您的git config -l输出(以及指向该答案的链接):这将使我和其他人可以尝试查看问题是否仍然存在。
VonC

1

另一种可能性:区分大小写的文件名错字

我在git blame file.txt中遇到了同样的问题,然后意识到我用file.txt进行了区分大小写的文件名拼写错误

将其更改为File.txt(例如),而无需指定my_branch,我得到了预期的结果:git blame File.txt

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.