Git blame在未提交重命名的文件上。

3

我有一个文件,我使用git mv oldfilename newfilename重命名了它。

在提交这个更改之前,我如何对此文件进行git blame?由于尚未提交,因此无法检测到重命名操作。

> git blame newfilename
> fatal: no such path 'newfilename' in HEAD

旧文件名已不再存在。

> git blame oldfilename
> fatal: cannot stat path 'oldfilename': No such file or directory

我很好奇你为什么想这样做。为什么不在重命名之前进行责备?或者在提交后进行责备(你总是可以撤消的)。 - Noufal Ibrahim
1
@NoufalIbrahim 我自己也遇到过这个问题很多次。Blame和log等指令是你在进行调查时运行的指令,而不是计划中的步骤。 - Schwern
@NoufallIbrahim 正在开发一个可视化工具,作为 vim 的插件使用,需要我对打开的文件进行 blame 操作(如果它已经被版本控制管理)。 - Fried Sock
1个回答

4

考虑到您已经告诉了git文件的移动情况,您可能认为它可以自己解决。但实际上并不是这样。

--contents开关可以满足您的需求。参考git-blame手册...

--contents <file>
   When <rev> is not specified, the command annotates the changes starting
   backwards from the working tree copy. This flag makes the command pretend as if
   the working tree copy has the contents of the named file (specify - to make the
   command read from the standard input).
git blame --contents newfilename -- oldfilename会在head版本中找到oldfilename,并使用newfilename作为最新修订版进行责备日志。
对于无法找到的文件进行责备的一般问题,可以为git blame传递特定版本。使用命令:git blame <rev> -- <file>,例如git blame HEAD -- oldfilename将提供旧文件的责备日志,如上次提交所示。 --通常用于告诉命令停止处理选项并将后面的内容视为普通参数。但是,git blame似乎过载了这个正常含义,以表示“不要查找文件”...我想。从文档上看不太清楚。
有关详细信息,请参见“git-blame”手册中的“SPECIFYING RANGES”。(链接)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接