2017-02-17 81 views
1

我在Windows 10上使用SourceTree 1.9.10.0,我不想将我的功能分支EUR-1058重新绑定到主设备上。我不喜欢这样写道:SourceTree - Git Rebase导致自动合并

enter image description here

这将导致以下三种:

enter image description here

,如果我做一个拉一个自动合并发生:

enter image description here

这是怎么发生的?是否这是由于提交“Mailcheck重写”在我的笔记本电脑上,而我现在正在从我的桌面重新定位,并且SHA-1哈希已经以某种方式更改或类似?

+0

你的语言很混乱。 “重新”到“是一个特定的事情,而不是你在做什么。您是否想要在'master'上重写'feature',反之亦然?至于自动合并,您在SourceTree中拉取的默认值可能会合并,因此您得到了合并。 –

+0

@TimBiegeleisen主人的EUR-1058。在SourceTree中,标题说'重新编译当前主目录到主目录 – Ogglas

回答

2

当您重新编制master上的EUR-1058分支时,您将重写为该分支的历史记录。考虑以下示出了这一点:

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

衍合EUR-1058master装置执行以下步骤:

  • 滚动分支返回到从其中分出master提交,在此情况下提交B
  • 然后重播B之上的master的提交,在这种情况下重放提交CD
  • 最后,重新应用你EUR-1058作出的提交,因为提交B,即承诺EF


重订基期后,该图是这样的:

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

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

现在回答你的问题的实际,当你试图在EUR-1058git pull,Git会先检查,看看你的本地分支可能是由什么是在远程(或origin/EUR-1058)快速转发。在这种情况下,没有快进是可能的。此时Git认为远程分支与您在本地完全不同。因此,它通过合并提交完成了拉取。

你或许应该做的什么是强制把你的基期EUR-1058分支到远程通过完成重订后:

git push --force EUR-1058 

使用武力是必要在这里,因为分支的历史/基础发生了变化。这与您最终进行合并提交的原因相同。在推动之后,你可以像往常一样继续生活。

作为谨慎的一句话,您应该认识到,重写EUR-1058的历史记录可能会导致共享此分支的任何人遇到问题。所以,应该仔细做。