git mergetool输出错误

时间:2018-01-08 13:24:30

标签: git github mergetool

我是git的新手并试图弄清楚它。

我在两个不同的文件夹中用单个文本文件克隆了我的测试仓库。 然后我在folder1中创建了两个分支B1,在folder2中创建了B2

B1我添加了一行,现在test.txt有以下内容

It is line from dev branch.
It is line from B1.

B1中的提交更改,与master合并,并将更改推回远程

现在B2也添加了不同的行,test.txt有以下内容

It is line from dev branch.
It is line from branch 'B2'.

当我尝试将B2与上游master同步时,会出现合并冲突

git pull --rebase origin master

First, rewinding head to replay your work on top of it...
Applying: Modified test.txt from B2
Using index info to reconstruct a base tree...
M       test.txt
Falling back to patching base and 3-way merge...
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
error: Failed to merge in the changes.

我打开了mergetool

git mergetool

它打开了meld,但此处LocalRemote文件已互换。 Local显示来自master分支的内容 Remote正在显示本地B2分支的内容。这是快照

https://postimg.org/image/njtivi32d/

我看错了还是实际上错了? 任何人都可以帮忙吗?

这是来自.gitconfig

的mergetool配置
[merge]
    tool = meld
[mergetool "meld"]
    cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"

1 个答案:

答案 0 :(得分:2)

rebase的工作方式是回滚目标分支,直到达到B2master之间最常见的祖先提交,然后从master开始提交。然后,在B2分支上的共同祖先提交之后发生B2提交将在master提交之上重播。

这解释了为什么本地版本类似master。它类似于master,因为这是rebase中此时本地分支的样子。遥控器看起来像B2,因为这些提交正在重播。

用图表理解这一点可能更容易。考虑一种情况,masterB2都有一个提交分歧。这意味着,自从最近的共同祖先,一个提交分别到达每个分支:

master: ... A -- B -- C
                  \
B2:                D

rebase的第一步是回滚B2分支,并在提交master后应用B中的提交。这给我们留下了以下内容:

master: ... A -- B -- C
                  \
B2:                C         [D commit not yet reapplied]

rebase的最后一步是重新申请 D提交B2

master: ... A -- B -- C
                  \
B2:                C -- D'

这是您看到的合并冲突发生的地方。此时,您已经拥有的“本地”代码与来自C的{​​{1}}提交相关联,而“远程”代码实际上来自原始master分支,之前反叛。