我正在尝试遵循此处描述的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.
Run Code Online (Sandbox Code Playgroud)
我的树看起来像这样: 
在图片中,您可以看到在重新设置基准之后,针对远海龙功能的两个后续提交被放置在本地计算机上的develop分支的尖端之后。但这对于原产地同行并没有发生,现在它们已经不同步了。
我想知道我的要素分支如何与原始要素分支同步。
这就是为什么您不应该重写已经发布的分支的历史的原因。您现在有两个选择:
如果您完全确定没有人在关闭远程分支(例如origin/open-sea-dragon-feature),则可以强制推送更新的分支:
git push --force origin open-sea-dragon-feature
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您将在此过程中“丢失”两个提交,但这在这里应该没问题,因为新的分支中包含了它们的基于重新定位的副本。
再次:如果其他人可能已经拉过远程分支,则不要这样做!当突然提取重写的历史记录时,他们将陷入困境。
如果您不能强制按下更新的分支(出于上述原因),则需要咬紧牙关并合并远程分支:
git merge origin/open-sea-dragon-feature
Run Code Online (Sandbox Code Playgroud)
之后,您将能够通过简单的快进合并进行推送,并且使用该分支的其他协作者将能够轻松地进行更改。
这将导致某些重复的提交出现在您的历史记录中。Git 应该处理差异,并能够执行干净合并。如果基于重新提交的提交在差异方面相同,则合并时不应出现任何冲突。