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