在rebase之后,功能分支原点和本地不同步

时间:2015-04-21 21:17:08

标签: git

我试图遵循此处描述的Git工作流程:http://nvie.com/posts/a-successful-git-branching-model/

完成一个功能并将其合并到我的开发分支后,我使用git rebase更新了一个不同的功能分支。

这似乎工作正常,但现在我尝试将此功能分支上的新更改推送到其原始计数器部分,我收到以下错误:

! [rejected]        open-sea-dragon-feature -> open-sea-dragon-feature (non-fast-forward)
error: failed to push some refs to 'git@bitbucket.org:jeffreycwitt/lombardpress2.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我的树看起来像这样:enter image description here

在图片中,您可以看到开放式海龙功能的两个后续提交,在rebase之后,被放置在我本地计算机上的develop分支的尖端之后。但是对于原始对手来说并没有发生这种情况,现在它们已经不同步了。

我想知道如何将我的功能分支与原始功能分支同步。

1 个答案:

答案 0 :(得分:4)

这正是不应该重写已发布分支的历史的原因。您现在有两个选择:

  1. 如果您绝对确定除了您正在使用远程分支(即origin/open-sea-dragon-feature)之外没有人,您可以强制推送更新的分支:

    git push --force origin open-sea-dragon-feature
    

    在您的情况下,您将在此过程中“丢失”两次提交,但这应该没有问题,因为他们的重新定位的对应方包含在新分支中。

    再次:不要这样做如果其他人可能已经拉过远程分支!当他们突然重写历史时,他们会遇到麻烦。

  2. 如果您无法强行推送更新的分支(由于上述原因),您需要咬紧牙关并合并远程分支:

    git merge origin/open-sea-dragon-feature
    

    在此之后,您将能够使用简单的快进合并,而使用该分支的其他协作者将能够轻松地进行更改。

    这会导致您的历史记录中出现一些重复的提交。 Git 处理差异,并能够执行干净合并。如果重新提交的提交是相同的,那么在合并时不应该有任何冲突。