考虑以下用例:
我正在本地分支上工作,同时在主分支上完成了重构。现在,一些文件(类)已被重命名和/或移动到新位置。合并时,由于缺少类,我收到很多很多导入错误。
--A--B--C--D--E-- (master)
\ \
F--G--H--I--J (topic)
In A
有我用过的旧名字F--G--H--I
.
In 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
由于我的分支上缺少重构,存在许多(编译)错误。 (因为我仍然参考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% 时才会将文件视为重命名
UPDATE:
要跳过所有中间步骤,请使用 diff 代替。 Git 将为您遵循重命名:
git diff -M --diff-filter=R --name-status ..master | cut -f2-
当你在你的主题分支上时。
然后,您可以通过管道将其生成一堆 sed 指令来调整您的引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)