查看git diff --name-status,如何判断文件是否已重命名?

时间:2016-07-14 00:03:41

标签: git

我有一个脚本使用git diff --name-status来查找给定分支和master分支之间的差异,并根据每个文件的更改方式执行各种操作。

Git不会跟踪重命名。虽然它知道在暂存提交时已重命名文件,但git diff --name-status仅显示已删除旧名称并添加了新名称。这对我来说是一个问题,因为我想对我的脚本采取额外的步骤来重命名文件。

鉴于已添加文件的名称,如何判断该文件是全新文件还是重命名另一个文件(如果是重命名文件,它的名称是什么)?

1 个答案:

答案 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),或
  • 升级到Git 2.9或更高版本,默认为启用。

另请参阅the git diff documentationcopies-M-C以及git config中其他可配置-B值的说明。 (例如,我将diff.*设置为0。)