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,但是这里 Local
和 Remote
文件互换了。
本地正在显示来自 master
分支的内容
远程正在显示来自本地 B2
分支的内容。这是快照
https://postimg.org/image/njtivi32d/
我是看错了还是真的错了?
有人可以帮忙吗?
这是来自 .gitconfig
的 mergetool 配置
[merge]
tool = meld
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
rebase 的工作方式是回滚目标分支,直到到达 B2
和 master
之间最常见的祖先提交,然后播放从该点开始的 master
的提交.然后,来自 B2
的提交发生 在 之后 B2
分支上的共同祖先提交在 master
提交之上重播。
这解释了为什么本地版本类似于 master
。它类似于 master
因为这是本地分支此时在 rebase 中的样子。远程看起来像 B2
因为这些提交正在重播。
用图表可能更容易理解。考虑这样一种情况,其中 master
和 B2
都因一次提交而发生分歧。这意味着自最近的共同祖先以来,一个提交已经分别到每个分支:
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" 代码与来自 master
的 C
提交关联,而 "remote" 代码实际上来自原始 B2
分支,在变基之前。
我是 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,但是这里 Local
和 Remote
文件互换了。
本地正在显示来自 master
分支的内容
远程正在显示来自本地 B2
分支的内容。这是快照
https://postimg.org/image/njtivi32d/
我是看错了还是真的错了? 有人可以帮忙吗?
这是来自 .gitconfig
[merge]
tool = meld
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
rebase 的工作方式是回滚目标分支,直到到达 B2
和 master
之间最常见的祖先提交,然后播放从该点开始的 master
的提交.然后,来自 B2
的提交发生 在 之后 B2
分支上的共同祖先提交在 master
提交之上重播。
这解释了为什么本地版本类似于 master
。它类似于 master
因为这是本地分支此时在 rebase 中的样子。远程看起来像 B2
因为这些提交正在重播。
用图表可能更容易理解。考虑这样一种情况,其中 master
和 B2
都因一次提交而发生分歧。这意味着自最近的共同祖先以来,一个提交已经分别到每个分支:
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" 代码与来自 master
的 C
提交关联,而 "remote" 代码实际上来自原始 B2
分支,在变基之前。