我开始使用meld作为我的merge.tool
。到目前为止它工作正常,但我今天遇到了三方合并的问题。
在MyBranch的file.txt中,我添加了代码ME
:
A
B
ME
D
E
与此同时,master添加了代码THEM_1
和THEM_2
。我跑git rebase master
。这就是当rebase暂停时file.txt的样子:
A
THEM_1
B
<<<<<<< HEAD
ME
||||||| merged common ancestors
=======
THEM_2
>>>>>>> My patch name
D
E
THEM_2应该在合并之前出现在ME之前,所以显而易见的合并是
A
THEM_1
B
THEM_2
ME
D
E
但是当我运行git mergetool
并打开时,三个版本都没有THEM_1
。是什么给了什么?
答案 0 :(得分:2)
我只是想重现你的情况。
如果我git checkout me; git merge theirs; git mergetool -t meld
,我会得到以下内容:
local | merge | remote
------+-------+-------
A | A | A
B | B | THEM_1
ME | D | B
D | E | THEM_2
E | | D
| | E
(这正是两个分支的内容和中间的共同父母。)
如果我git checkout me; git rebase theirs; git mergetool -t meld
,我会使用本地和远程交换相同。
在这两种情况下,您只需点击即可添加THEM_1。对于ME / THEM_2处的冲突,您可以通过单击添加一侧,但必须在中间框架中手动添加另一侧。
看看kdiff3
它是解决合并冲突的更好工具。
请注意,如果要重新设置多个提交,那么带冲突的rebase往往会很棘手。