首页 > 解决方案 > git如何列出两次提交之间的所有文件和目录重命名

问题描述

我正在编写一个使用 git 的脚本。它需要知道所有重命名的目录和文件的旧文件路径和新文件路径。

我想做的例子:git diff --find-renames-only someGitHash someGitHash 然后我想看到一个类似的列表:

rename old/path/old-file-name.extension->new/path/new-file-name.extension

或者

rename from source/README.md
rename to documentation/README.md

或类似的东西,只要它具有带有旧目录路径的旧文件名和带有新目录路径的新文件名。

到目前为止,我到处乱找,我能找到的最接近的东西是git diff --find-renames

git diff --find-renames给了我想要的数据,但是每个文件的数据太多了。这绝对不是我想要处理和解析的事情。我正在使用的一些 git 存储库可能有数千个文件/文件夹重命名......

例子:

...tons more data that I do not want to parse through
rename from source/README.md
rename to documentation/README.md
...tons more data including diffs of files before and after... 

this pattern continued for each file...

如何在没有额外数据的情况下列出两个 git 提交之间的所有文件和目录重命名?

任何帮助将不胜感激,谢谢!

标签: gitrenamedifffile-renamegit-diff

解决方案


git log --name-status <start_commit>..<end_commit> | grep ^R

这将向您显示从最新到最旧的重命名历史。

输出如下所示:

R100    the-5-min/.watchmanconfig       the-10-min/.watchmanconfig
R100    the-5-min/App.tsx       the-10-min/App.tsx
R085    the-5-min/app.json      the-10-min/app.json
R100    the-5-min/assets/examples/accordion.png the-10-min/assets/examples/accordion.png
R100    the-5-min/assets/examples/angular-gradient.png  the-10-min/assets/examples/angular-gradient.png

第一个字母是更改的类型(不同更改类型的详细信息请参见--diff-filter),数字是提交之间的相似程度。列出的第一个文件名是旧文件名,第二个文件名是新文件名。


推荐阅读