git mergetool 输出错误

git mergetool output is wrong

我是 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'.

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

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 文件互换了。 本地正在显示来自 master 分支的内容 远程正在显示来自本地 B2 分支的内容。这是快照

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

我是看错了还是真的错了? 有人可以帮忙吗?

这是来自 .gitconfig

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

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

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

用图表可能更容易理解。考虑这样一种情况,其中 masterB2 都因一次提交而发生分歧。这意味着自最近的共同祖先以来,一个提交已经分别到每个分支:

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

变基的第一步是回退 B2 分支并应用自提交 B 以来 master 中的提交。这给我们留下了以下内容:

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

变基的最后一步是重新应用 D 提交到 B2:

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

这是您看到的合并冲突发生的地方。此时,您已经拥有的 "local" 代码与来自 masterC 提交关联,而 "remote" 代码实际上来自原始 B2 分支,在变基之前。