SourceTree-Git重基导致自动合并

SourceTree-Git重基导致自动合并,git,atlassian-sourcetree,sourcetree,Git,Atlassian Sourcetree,Sourcetree,我正在Windows 10上使用SourceTree 1.9.10.0,我不想将我的功能分支EUR-1058重新设置到master上。我是这样做的: master: ...A -- B ---- C -- D \ EUR-1058: E' -- F' 这将生成以下树: 如果我拉一个按钮,就会自动合并: 为什么会这样?这是因为提交“邮件检查重写”在我的笔记本电脑上,而我现在正在从我

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

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

这将生成以下树:

如果我拉一个按钮,就会自动合并:


为什么会这样?这是因为提交“邮件检查重写”在我的笔记本电脑上,而我现在正在从我的桌面上重新打包,SHA-1哈希值不知怎么地发生了变化或类似的事情吗?

当你在
master
上重新打包你的
EUR-1058
分支时,你重写了该分支的历史记录。考虑下面的图解说明:

master:   ...A -- B ---- C -- D
                   \
EUR-1058:           E -- F
master
上对
EUR-1058
重新定基意味着执行以下步骤:

  • 将分支回滚到从其分支的提交
    master
    ,在本例中为提交
    B
  • 然后在
    B
    上重放
    master
    中的提交,在这种情况下,重放提交
    C
    D
  • 最后,重新应用您自提交以来对
    EUR-1058
    所做的提交,即提交
    e
    F

重定基址后,图表如下所示:

master:   ...A -- B ---- C -- D
                               \
EUR-1058:                       E' -- F'
请注意,我已经标记了
E'
F'
,以表明这些实际上是在重新基址期间进行的新提交

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

您可能应该做的是,在通过以下方式完成重定基础后,强制将您的重定基础
EUR-1058
分支推送到远程:

git push --force EUR-1058
此处必须使用武力,因为分支的历史/基础已更改。这与您最终进行合并提交的原因相同。在用力推动之后,你可以像往常一样继续生活


作为警告,您应该意识到重写
EUR-1058
的历史记录可能会给共享此分支的任何人带来问题。所以,这件事要小心。

你的语言令人困惑。重新设置“到”是一件特定的事情,而不是您正在做的事情。您是否试图在
master
上重新设置
功能的基础,或者反之亦然?至于自动合并,拉入SourceTree的默认值可能是合并,因此您得到了一个合并。@TimBiegeleisen EUR-1058 on master。在SourceTree中,标题为
将当前更改重新基址到主节点上