考虑以下用例:
我在本地分支上工作,而主分支上的重构已经完成。现在一些文件(类)已被重命名和/或移动到新位置。 merge 时,由于缺少类,我会遇到很多导入错误。
--A--B--C--D--E-- (master)
\ \
F--G--H--I--J (topic)
在 A
中有我在 F--G--H--I
中使用的旧名称。
在 B--C--D--E
中,文件被重构,导致 E
中的新文件名。这包括链式重命名,如
B: path/to/File.java
-> C: path/to/BetterName.java
-> D: better/package/BetterName.java
-> E: final/package/FinalName.java
现在 J
中的 merge 结果由于我的分支上缺少重构而出现许多(编译)错误。 (因为我仍然引用 path.to.File
而不是 final.package.FinalName
为了修复损坏的构建,我需要知道旧类的新名称。
是否有 git 命令可以获取已应用于特定文件的所有重命名?
最佳答案
Git 应该找到文件的重命名。但是,如果文件中有 50% 或更多行更改,则不再将其视为重命名。您可以根据需要更改此阈值。
这是执行此操作的命令:
git log -M --diff-filter=R --stat
它只会显示重命名。如果您想将阈值更改为默认值 50% 以外的其他值,您只需将数字添加到 M 选项即可:
git log -M90 --diff-filter=R --stat
仅当内容更改不超过 10% 时才会将文件视为已重命名
更新:
要跳过所有中间步骤,请改用 diff。 Git 将为您遵循重命名:
git diff -M --diff-filter=R --name-status ..master | cut -f2-
当你在你的主题分支上时。
然后您可以将其通过管道发送到一堆 sed 指令来调整您的引用。
关于git - 如何找到原名已知的重命名文件的新路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10192285/