如何在移动/重命名的文件上执行git diff?

dr *_*rry 120 git diff mv file-rename

我用了一个文件git mv.现在我想在新文件上做一个diff来将它与旧文件(旧的,现在不存在的名称)进行比较.

我该怎么做呢?

Zit*_*rax 141

您需要使用-M让git在传播时自动检测移动的文件.仅仅使用git diff作为knittl提到的对我不起作用.

如此简单:git diff -M应该这样做.

此开关的文档是:

-M[<n>], --find-renames[=<n>]
       Detect renames. If n is specified, it is a threshold on the similarity index 
       (i.e. amount of addition/deletions compared to the file’s size). For example, 
       -M90% means git should consider a delete/add pair to be a rename if more than
       90% of the file hasn’t changed.
Run Code Online (Sandbox Code Playgroud)

  • 救命稻草!我的git差异现在好多了.1)始终使用此选项是否安全?2)我可以将此选项作为默认行为添加到我的`〜/ .gitconfig`中吗? (7认同)
  • 请注意,重命名检测仅在旧文件和新文件出现在`git diff`处理的文件集合中时才有效.在单个(重命名)文件上运行`git diff -M`不会报告重命名. (4认同)

Jak*_*ski 79

除了knittl写的内容,你总是可以使用:

git diff HEAD:./oldfilename newfilename
Run Code Online (Sandbox Code Playgroud)

where HEAD:./oldfilename表示相对于当前目录的最后一次提交(在HEAD中)中的oldfilename.

如果你没有足够新的git,你将不得不使用:

git diff HEAD:path/to/oldfilename newfilename
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你.你也可以指定一个特定的提交而不是head,即`git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./ oldfilename newfilename` (8认同)
  • 如果不清楚,您还可以指定分支名称或任何其他引用,例如:`git diff branch:old/filen.name newfilename` (8认同)

Von*_*onC 18

使用git 2.9(2016年6月),您将不必再添加-M.默认git diff使用-M.

请参阅Matthieu Moy()提交5404c11,提交9501d19,提交a9276a6,提交f07fc9e,提交62df1e6(2016年2月25日).(由Junio C Hamano合并- -提交5d2a30d,2016年4月3日)moy
gitster

diff:diff.renames默认激活

重命名检测是一个非常方便的功能,新用户不必深入挖掘文档以从中受益.

激活重命名检测的潜在反对意见是它有时会失败,有时会很慢.但是在某些情况下,默认情况下已经激活重命名检测,例如" git status"和" git merge",因此激活diff.renames不会从根本上改变这种情况.当重命名检测失败时,它现在在" git diff"和" git status" 之间始终失败.

此设置不会影响管道命令,因此编写良好的脚本不会受到影响.

此功能的新测试就在这里.