2013-12-19 85 views
3

我迷失在一个回购迷宫中,一些文件被重新读入,而旧版本因为一个不太好的转换而被重新命名。如何查找所有提交git的所有重命名?

无论如何,我想列出在某些时候重新命名的所有文件,也就是列出所有提交中的所有重命名文件。

+0

'git log --follow' from [this question](http://stackoverflow.com/questions/5743739/how-to-really-show-logs-of-renamed-files-with-git) – johnMa

+0

对不起,我想列出所有提交中已更改的所有*文件,'--follow'仅适用于单个文件。 – Roberto

+0

这听起来像你是在一个恶心的情况。你能够在rebase之前使用'git reflog'(或者一个分支,或者其他的东西)并且从那里重做你的提交,所以你不在这个位置? – James

回答

2

这样就够了吗?

git whatchanged -M5 --summary | grep rename | grep '=>'

下面是修改后的版本,这将不改名,并删除的文件:

git whatchanged -M5 --summary | grep -E 'rename.*=>|delete mode'

这会给你所有从当前分支的HEAD重命名和它的祖先,包括合并后的父母直到第一次提交。 -M5将具有50%或更多相似的文件报告为重命名;这可能会降低百分比,但您可以更改它(5读取为.5或50%,因此您可以将其更改为M8,达到80%)。被警告,如果有很多提交,将需要很长时间。

我建议您将提交诸如范围:

git whatchanged -M5 --summary <commit-id>..HEAD | grep rename | grep '=>'

至于我可以告诉你需要开始一个承诺,我不知道你怎么会得到一个全面的列表立即在所有分支和标签上重命名文件。如果您想要检查不同的分支,或者在单个回购中有独立提交历史的分支,则需要在每个分支上运行建议的命令。

+0

太棒了!谢谢。你能否更新你的答案以包括已删除的文件? – Roberto

+0

@Roberto当然,我添加了一个版本,可以显示哪些文件被删除。 – James