如何做移动/重命名文件的git diff?
我使用git mv
移动了一个文件。 现在我想对新文件进行比较,以便与旧文件(使用旧的,现在不存在的名称)进行比较。
我该怎么做呢?
您需要使用-M让git在差异时自动检测移动的文件。 提到的knittl只是使用git diff
不适合我。
所以简单地说: git diff -M
应该这样做。
这个开关的文档是:
-M[<n>], --find-renames[=<n>] Detect renames. If n is specified, it is a threshold on the similarity index (ie 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.
除了knittl写的东西 ,你总是可以使用:
git diff HEAD:./oldfilename newfilename
HEAD:./oldfilename
表示相对于当前目录的上次提交(在HEAD中)的oldfilename。
如果你没有足够新的git,你将不得不使用:
git diff HEAD:path/to/oldfilename newfilename
使用git 2.9(2016年6月),您不必再添加-M
了。 git diff
默认使用-M
。
参见Matthieu Moy( moy
)的 提交5404c11 , 提交9501d19 , 提交a9276a6 , 提交f07fc9e , 提交62df1e6 (2016年2月25日) 。
(由Junio C gitster
合并- gitster
-于5d2a30d ,2016年4月3日)
diff
:默认激活diff.renames
重命名检测是一个非常方便的function,新用户不应该在文档中挖掘以从中受益。
对重新激活重新命名检测的潜在反对意见是它有时会失败,而且有时很慢。 但是在“
git status
”和“git merge
”等几种情况下,重命名检测已经被默认激活,所以激活diff.renames
并不会从根本上改变这种情况。 当重命名检测失败时,它现在在“git diff
”和“git status
”之间一致失败。这个设置不会影响pipe道命令,因此写得很好的脚本不会受到影响。
这个function的新testing在这里 。
无论什么原因使用HEAD:./oldfilename
(或绝对path)不适合我,但HEAD:oldfilename
did(谢谢cmn):
git diff HEAD:oldfilename newfilename git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
只需运行没有任何参数的git diff -- newfilename
,或者git diff -- newfilename
。 git足够聪明,可以比较正确的文件/内容(即重命名之前的原始内容与重命名后的更改内容)