我有2个分支A和B
在分支A中,我将Thing.java重命名为ThingImpl.java,并重写了Thing.java,使其现在成为一个接口。我还为ThingImpl.java添加了不少内容。
在分支B中我编辑了Thing.java中的类
现在我正在尝试将我的更改从分支A合并到分支B,并且它正在尝试将我的更改合并到接口Thing.java中,而不是将diff应用于ThingImpl.java,这应该是它应该做的。有没有办法告诉git这样做?
答案 0 :(得分:1)
这取决于这些文件的内容以及它们的变化程度。
您可以使用以下命令指示git merge检测更难的重命名:
git merge --no-ff -Xrename-threshold=15 -Xpatience -Xignore-space-change A
-Xrename-threshold=15
是为了控制15%的相似性已足以考虑将两个文件重命名为候选者。
但这不会涵盖所有用例,如“git fails to detect renaming”和“git merge with renamed files”所示。
答案 1 :(得分:1)
当您将分支A合并到分支B时,预期的结果是存在一个文件Thing.java,它与分支A中的版本相同,以及一个文件ThingImpl.java,它与分支A中的基本相同,但是对B分支进行了更改。
最简单的是:
git checkout branch_B
git mv Thing.java ThingImpl.java
git commit -m "A technical change to make the upcoming merge possible."
git merge branch_A
现在你不依赖于重命名检测。
如果您的构建在辅助提交之后和合并之前失败,您可以修改构建过程以将重命名的文件考虑在内。
答案 2 :(得分:0)
我想有没有办法告诉Git确切的文件历史图是什么样的,因为它依赖于它自己的diff: Getting Git to follow renamed and edited files
我可能应该将ThingImpl.java的重命名与在分支A中更改ThingImpl.java分开,以避免此问题。
因为我必须手动合并。