Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git合并:将文件与其他文件合并_Git_Git Merge - Fatal编程技术网

Git合并:将文件与其他文件合并

Git合并:将文件与其他文件合并,git,git-merge,Git,Git Merge,我有两个分支A和B 在分支A中,我将Thing.java重命名为ThingImpl.java,并重写Thing.java,使其成为一个接口。我还向ThingImpl.java添加了很多内容 在分支B中,我在Thing.java中编辑了这个类 现在我尝试将分支A中的更改合并到分支B中,它尝试将我的更改合并到接口Thing.java中,而不是将diff应用到ThingImpl.java中,这正是它应该做的。有没有办法告诉git这样做?这取决于这些文件的内容以及它们的更改程度 您可以指示git mer

我有两个分支A和B

在分支A中,我将Thing.java重命名为ThingImpl.java,并重写Thing.java,使其成为一个接口。我还向ThingImpl.java添加了很多内容

在分支B中,我在Thing.java中编辑了这个类


现在我尝试将分支A中的更改合并到分支B中,它尝试将我的更改合并到接口Thing.java中,而不是将diff应用到ThingImpl.java中,这正是它应该做的。有没有办法告诉git这样做?

这取决于这些文件的内容以及它们的更改程度

您可以指示git merge检测更难的重命名,方法是:

git merge --no-ff -Xrename-threshold=15 -Xpatience -Xignore-space-change A

<代码> -xReNeNealSt==15 < /代码>将是为了控制15%的相似性已经足够考虑两个文件重命名候选。


但这并不能涵盖所有用例,如“”和“”中所示。

我想无法确切地告诉Git文件历史图是什么样子,因为它依赖于自己的差异:

为了避免这个问题,我可能应该在分支A中分别提交ThingImpl.java的重命名和ThingImpl.java的更改


实际上,我必须手动合并。

当您将分支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
现在,您不必依赖于重命名检测


如果您的生成在辅助提交之后和合并之前失败,您可以修改生成过程以将重命名的文件考虑在内。

它对我不起作用。我猜Thing.java在这两个分支中都被编辑得太多了。确切地说:如果内容太不同,git不会检测到重命名。我认为它不起作用,因为现在两个分支中都有一个文件Thing.java,而且重命名检测甚至不会发生。