git - 如何找到原名已知的重命名文件的新路径?

标签 git refactoring git-bash

考虑以下用例:

我在本地分支上工作,而主分支上的重构已经完成。现在一些文件(类)已被重命名和/或移动到新位置。 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/

相关文章:

Java流API : How to use method reference?

windows - git ssh 身份验证失败,ssh_askpass : posix_spawn: Unknown error

git - 如何在忽略本地更改的同时返回 `git pull`?

git - 如果 Github 中不存在自定义标签,则阻止 merge

git - 如何从 GitHub 中完全删除提交?

javascript - lodash fp 并重构一些现有代码

Git clean 不删除文件

Selenium - LoadableComponent 和 SlowLoadableComponent 有什么区别

javascript - 从快捷方式使用 GitBash 运行 javascript 文件

Git .bash_profile 无法使用右键单击