我有一个脚本使用git diff --name-status
来查找给定分支和master
分支之间的差异,并根据每个文件的更改方式执行各种操作。
Git不会跟踪重命名。虽然它知道在暂存提交时已重命名文件,但git diff --name-status
仅显示已删除旧名称并添加了新名称。这对我来说是一个问题,因为我想对我的脚本采取额外的步骤来重命名文件。
鉴于已添加文件的名称,如何判断该文件是全新文件还是重命名另一个文件(如果是重命名文件,它的名称是什么)?
答案 0 :(得分:3)
Git不会跟踪重命名。
这是真的!但是......
虽然它知道在提交提交时已重命名文件,但
......事实上,这并不完全正确:Git只是猜测; git mv
不记录重命名,您可以手动重命名或复制文件,然后只需git rm --cached
旧路径git add
新路径(按任意顺序),效果相同
git diff --name-status
仅显示旧名称已被删除且新名称已添加。
您可以通过启用重命名检测,让git diff
与<{1}}进行相同的猜测。实际上,git status
只是在启用了重命名检测的情况下运行git status
,以及一些额外的加速选项(例如,告诉git diff
它不应该费心去尝试生成差异,只是git diff
信息,当然使用--name-status
时也是如此。
在运行--name-status
时启用重命名检测:
git diff
或-M
添加到命令行,或--find-renames
设置为diff.renames
(甚至true
),或另请参阅the git diff
documentation中copies
,-M
和-C
以及git config
中其他可配置-B
值的说明。 (例如,我将diff.*
设置为0。)