Answers:
您需要使用-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.
~/.gitconfig
吗?
git diff
。运行git diff -M
在单个(改名)文件不报告重命名。
git log --follow -- file_after_move.txt
效果很好。它显示了整个历史,包括搬迁之前的历史。有任何想法吗?我在跑步git version 2.11.0.windows.1
。
-C
用于检测副本的选项非常有用且类似。我用它-M
来查看一个diff,在该diff中我将一个文件重构为两个(两个文件的名称都不匹配原始文件)。
git diff HEAD:./oldfilename newfilename
其中HEAD:./oldfilename
表示相对于当前目录的最后一次提交(在HEAD中)的oldfilename。
如果没有足够新的git,则必须改用:
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
进入目录并且不要--
在该commit:path
对之前添加。Git在这里对语法似乎很挑剔。
<commit-ish>:<pathname>
语法是一个对象标识符,有点像Git-ish;在--
Git 之后只需要文件名。
使用git 2.9(2016年6月),您将不再需要添加-M
。默认git diff
使用-M
。
请参阅Matthieu Moy()提交5404c11,提交9501d19,提交a9276a6,提交f07fc9e和提交62df1e6(2016年2月25日)。(由Junio C Hamano合并--在commit 5d2a30d中,2016年4月3日)moy
gitster
diff
:diff.renames
默认激活重命名检测是一个非常方便的功能,新用户不必从文档中受益即可。
激活重命名检测的潜在异议是它有时会失败,并且有时会很慢。但是在某些情况下(例如“
git status
”和“git merge
”),默认情况下已激活重命名检测,因此激活diff.renames
不会从根本上改变情况。现在,重命名检测失败时,它在“git diff
”和“git status
” 之间始终失败。此设置不会影响管道命令,因此,不会影响编写良好的脚本。
git diff -M
像其他人所说的那样激活重命名检测(并且@VonC指出,默认情况下它是从git 2.9激活的)。但是,如果变更集很大,则可能仍然会再次关闭不精确的重命名检测。Git将显示如下警告,在您正在查看的差异中很容易错过:
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.
在这种情况下,请按照git的建议设置配置选项,例如
git config diff.renamelimit 450
并重新运行diff命令。
出于某种原因,使用HEAD:./oldfilename
(或绝对路径)对我不起作用,但对我却有HEAD:oldfilename
用(感谢cmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
高温超导
HEAD:./oldfilename
?
只需运行git diff
而无需任何参数,或git diff -- newfilename
。git很聪明,可以比较正确的文件/内容(即,重命名之前的原始内容与重命名之后的更改内容)
git mv
使用单个文件,然后将暂存状态与另一个否则相同的分支进行比较,将产生“所有内容均已删除并再次重新创建” diff,除非-M
使用该差异。
git diff -- yourRenamedFile
就足够了。请在下面