重整后Git分支分歧,那么为什么要重整?

24

最近我收到了一个分支分叉的通知。这是在我创建一个功能分支、将其推送到远程,几天后再次开始工作时与主分支进行变基时发生的。

git checkout -b feature-branch
git push origin feature-branch:feature-branch

...而当处于主分支时...

git pull origin master
git checkout feature-branch
git rebase master

但是当我想再次推送我的分支时,它会显示:

On branch feature-branch
Your branch and 'origin/feature-branch' have diverged,
and have 67 and 1 different commit each, respectively.

我在"Git 分支对齐后发生分歧"中找到了这个答案:

既然你已经推送了该分支,那么应该将源分支合并,而不是对其进行变基。

问题

阅读这篇文章后,我仍然不完全理解我的流程中应该做些什么不同,并且为什么我仍然想使用 Git 变基。希望有人能够解释一下,谢谢!


1
你链接中提到的 push -f 怎么处理?如果你是在独自开发这个分支,你可以使用强制推送。 - VonC
我在一个团队中工作,所以我认为覆盖远程分支不是一个好主意... - Amber
那么你就不能进行变基操作了,只能进行合并。 - VonC
谢谢您的回复!所以只有在您还没有推送您的分支时才进行变基? - Amber
1个回答

34

这个想法是仅在您尚未推送时进行 rebase,以重放您的本地提交。

一旦您已经推送了(并且正在团队中工作),您不应该在 master 上对分支进行 rebase,因为它会重新编写其 SHA1,强制您强制推送分支的新状态。

http://rypress.com/tutorials/git/media/5-1.png

在这里,最好使⽤git merge master将其合并到您的分支中:您在本地解决冲突,然后可以添加更多提交内容,并进行常规推送。

http://i.stack.imgur.com/wBMwq.png

请参阅“在将master合并到分支和将分支合并到master之间有什么区别?”中的更多信息。


对于这个旧答案的子问题。如果从“特性分支”中执行git rebase master,然后执行git pull处理合并和git push呢?如果远程分支与本地分支一致(你已经推送了最新版本),会有什么问题吗?也许我误解了Git的内部工作原理。 - Eppilo
@Eppilo 当然可以,只是将特性分支在主分支之上进行变基会重写其历史记录,导致强制推送。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接