SourceTree - Git Rebase 导致自动合并
SourceTree - Git Rebase resulting in automatic merge
我在 Windows 10 上使用 SourceTree 1.9.10.0,我不想将我的功能分支 EUR-1058 变基到主分支上。我是这样做的:
这会产生以下树:
如果我执行拉取操作,则会发生自动合并:
为什么会这样?是因为提交 "Mailcheck rewrite" 是在我的笔记本电脑上,我现在正在从我的桌面变基并且 SHA-1 哈希不知何故发生了变化或类似的事情吗?
当您将 EUR-1058
分支重新设置为 master
时,您 重写了 该分支的历史记录。考虑下图说明这一点:
master: ...A -- B ---- C -- D
\
EUR-1058: E -- F
在 master
上变基 EUR-1058
意味着执行以下步骤:
- 将分支回滚到分支的提交
master
,在本例中为提交 B
- 然后在
B
之上重播来自 master
的提交,在本例中重播提交 C
和 D
- 最后,重新应用自提交
B
以来您对 EUR-1058
所做的提交,即提交 E
和 F
变基后,图表如下所示:
master: ...A -- B ---- C -- D
\
EUR-1058: E' -- F'
请注意,我已经标记了 E'
和 F'
,以表明这些实际上是 new 提交,它们是在变基期间进行的。
现在回答您的实际问题,当您尝试在 EUR-1058
上执行 git pull
时,Git 首先检查您的本地分支机构是否可以 fast-forwarded通过遥控器上的内容(或 origin/EUR-1058
中的内容)。在这种情况下,fast-forward 是不可能的。 Git 此时将远程分支视为与本地分支完全不同。因此,它通过合并提交完成了拉动。
你可能应该做的是在完成变基后强制将变基 EUR-1058
分支推送到远程:
git push --force EUR-1058
这里需要用力,因为分支的history/base发生了变化。这与您最终进行合并提交的原因相同。强推后可以正常生活
请注意,您应该意识到重写 EUR-1058
的历史可能会给共享此分支的任何人带来问题。所以,一定要慎重。
我在 Windows 10 上使用 SourceTree 1.9.10.0,我不想将我的功能分支 EUR-1058 变基到主分支上。我是这样做的:
这会产生以下树:
如果我执行拉取操作,则会发生自动合并:
为什么会这样?是因为提交 "Mailcheck rewrite" 是在我的笔记本电脑上,我现在正在从我的桌面变基并且 SHA-1 哈希不知何故发生了变化或类似的事情吗?
当您将 EUR-1058
分支重新设置为 master
时,您 重写了 该分支的历史记录。考虑下图说明这一点:
master: ...A -- B ---- C -- D
\
EUR-1058: E -- F
在 master
上变基 EUR-1058
意味着执行以下步骤:
- 将分支回滚到分支的提交
master
,在本例中为提交B
- 然后在
B
之上重播来自master
的提交,在本例中重播提交C
和D
- 最后,重新应用自提交
B
以来您对EUR-1058
所做的提交,即提交E
和F
变基后,图表如下所示:
master: ...A -- B ---- C -- D
\
EUR-1058: E' -- F'
请注意,我已经标记了 E'
和 F'
,以表明这些实际上是 new 提交,它们是在变基期间进行的。
现在回答您的实际问题,当您尝试在 EUR-1058
上执行 git pull
时,Git 首先检查您的本地分支机构是否可以 fast-forwarded通过遥控器上的内容(或 origin/EUR-1058
中的内容)。在这种情况下,fast-forward 是不可能的。 Git 此时将远程分支视为与本地分支完全不同。因此,它通过合并提交完成了拉动。
你可能应该做的是在完成变基后强制将变基 EUR-1058
分支推送到远程:
git push --force EUR-1058
这里需要用力,因为分支的history/base发生了变化。这与您最终进行合并提交的原因相同。强推后可以正常生活
请注意,您应该意识到重写 EUR-1058
的历史可能会给共享此分支的任何人带来问题。所以,一定要慎重。