【问题标题】:How to find all renames in all commits on git?如何在 git 上的所有提交中找到所有重命名?
【发布时间】:2014-01-07 11:13:34
【问题描述】:

我迷失在一个 repo 迷宫中,其中有一堆文件被读取,而他们的旧版本由于做了一个不太好的 rebase 而被重命名。

无论如何,我想列出在某个时间点被重命名的所有文件,即列出所有提交中的所有重命名文件。

【问题讨论】:

  • git log --follow 来自this question
  • 对不起,不,我想列出所有提交中更改的 all 文件,--follow 仅适用于单个文件。
  • 听起来你的处境很糟糕。您是否可以在变基之前使用git reflog(或分支或其他东西)并从那里重做您的提交,这样您就不会处于这个位置?

标签: git


【解决方案1】:

这就够了吗?

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

这是一个修改后的版本,可以重命名和删除文件:

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

这将为您提供当前分支的 HEAD 的所有重命名,它的祖先包括合并的父级,直到第一次提交。 -M5 将有 50% 或更多相似的文件报告为重命名;这可能百分比很低,但您可以更改它(5 读作 0.5 或 50%,因此您可以将其更改为 M8 为 80%)。请注意,如果有很多提交,这将需要很长时间。

我建议你限制提交的范围,例如:

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

据我所知,您需要从提交开始,我不确定如何一次获得所有分支和标签的重命名文件的完整列表。如果您要检查不同的分支,或者在单个 repo 中具有独立提交历史的分支,则需要在每个分支上运行建议的命令。

【讨论】:

  • 太棒了!谢谢。您能否更新您的答案以包括已删除的文件?
  • @Roberto 当然,我添加了一个版本,可以显示哪些文件也被删除了。
  • --summary 正在为我剪辑文件名。我改用这个命令:git whatchanged -M5 <commit-hash>..HEAD | grep R100
猜你喜欢
  • 2017-05-14
  • 2020-11-23
  • 1970-01-01
  • 2011-04-06
  • 2014-06-29
  • 2021-03-17
  • 2015-11-12
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多