SourceTree - Git Rebase导致自动合并

时间:2017-02-17 06:35:53

标签: git atlassian-sourcetree sourcetree

我在Windows 10上使用SourceTree 1.9.10.0并且我不想将我的功能分支EUR-1058重新设置为master。我是这样做的:

enter image description here

这导致以下树:

enter image description here

如果我做了拉动,则会发生自动合并:

enter image description here

为什么会这样?是否由于提交" Mailcheck重写"在我的笔记本电脑上,我现在正在从我的桌面进行重新调整,并且SHA-1哈希值有所改变或类似的东西?

1 个答案:

答案 0 :(得分:3)

当您在EUR-1058上重新设置master分支时,您重写该分支的历史记录。请考虑以下图表说明要点:

master:   ...A -- B ---- C -- D
                   \
EUR-1058:           E -- F

EUR-1058上重新master表示执行以下步骤:

  • 将分支回滚到它从中分支master的提交,在这种情况下提交B
  • 然后在master之上重播B的提交,在这种情况下重播提交CD
  • 最后,重新提交自提交EUR-1058以来对B提交的提交,即提交EF


在变基础之后,图表看起来像这样:

master:   ...A -- B ---- C -- D
                               \
EUR-1058:                       E' -- F'

请注意,我已标记为E'F',以表明这些是提交,这是在rebase期间进行的。

现在回答您的实际问题,当您尝试在git pull上执行EUR-1058时,Git首先检查您的本地分支是否可以通过遥控器上的内容快速转发(或在origin/EUR-1058)。在这种情况下,不可能有快进。此时Git查看远程分支与本地完全不同。因此,它通过进行合并提交来完成拉动。

您可能应该做的是在完成rebase后通过以下方式强制将您的重新定位EUR-1058分支推送到遥控器:

git push --force EUR-1058

这里需要使用force,因为分支的历史/基数已经改变。这与您最终进行合并提交的原因相同。推力后,你可以继续正常生活。

请注意,您应该意识到重写EUR-1058的历史可能会导致共享此分支的任何人遇到问题。所以,应该认真做好。