git mergetool没有正确合并3路

时间:2013-10-25 20:03:02

标签: git git-rebase meld

我开始使用meld作为我的merge.tool。到目前为止它工作正常,但我今天遇到了三方合并的问题。

在MyBranch的file.txt中,我添加了代码ME

A
B
ME
D
E

与此同时,master添加了代码THEM_1THEM_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。是什么给了什么?

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往往会很棘手。