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 的提交,在本例中重播提交 CD
  • 最后,重新应用自提交 B 以来您对 EUR-1058 所做的提交,即提交 EF


变基后,图表如下所示:

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 的历史可能会给共享此分支的任何人带来问题。所以,一定要慎重。