2016-12-10 108 views
2

我有2个分支A和BGit的合并:合并文件有不同的文件

在分支A I改名Thing.java到ThingImpl.java,并改写了Thing.java以便它现在的界面。我还向ThingImpl.java添加了很多内容。

在分支BI编辑类Thing.java

现在我想从一个分支我的更改合并到分支B,和它试图我更改合并到界面Thing.java,而不是应用对ThingImpl.java的差异,这是它应该做的。有没有办法告诉git做到这一点?

回答

1

这取决于这些文件的内容以及它们已经改变了多少。

您可以指示混帐合并检测更难重命名,具有:

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”中所示。

+0

它没有为我工作。我猜Thing.java在两个分支都被编辑得太多了。 – ario

+0

正确:如果内容太不同,git将不会检测到重命名。 – VonC

+1

我认为它不起作用,因为现在两个分支中都有一个Thing.java文件,甚至不会发生重命名检测。 – j6t

0

我想有没有办法告诉Git的文件历史记录图形看起来完全像什么,因为它依赖于自身的差异: Getting Git to follow renamed and edited files

我也许应该单独进行更改致力于ThingImpl.java的重命名分支A的ThingImpl.java,以避免此问题。我不得不手动合并。

1

当您将分支A合并到分支B时,预期的结果是存在与分支A中的版本相同的Thing.java文件和分支中基本相同的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 

现在,如果你的构建失败的辅助后提交,并在合并之前,你可以修改构建你不依赖于重命名检测踢

。考虑重命名文件的过程。