git rebase master然后推送origin分支导致非快进错误

时间:2012-01-20 23:03:10

标签: git branch rebase fast-forward

我正在尝试使用我的featureA分支,同时让它与主分支保持同步。

这是方案

git clone ssh://xxx/repo

git checkout -b featureA

$ git add file.txt

$ git commit -m 'adding file' 

$ git push origin featureA

同时有几个新的提交被推送到原始主人

git checkout master

git pull origin master

git checkout featureA

git rebase master

git push origin feature A
To ssh://xxx/repo
 ! [rejected]        featureA -> featureA (non-fast-forward)
error: failed to push some refs to 'ssh://xxx/repo'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

如何在不强制服务器接受的情况下进行rebase?

2 个答案:

答案 0 :(得分:9)

在变基后你不能推动。提交现在有不同的SHA1,因为它们的历史不同。如果更新的ref不包含其祖先的旧参考,那么这是一个可能有害的操作,git将不允许它。

如果你不想强迫,你唯一的选择是合并。

如果你单独工作并且不需要让其他人投入这个分支,强迫就不那么糟了。

答案 1 :(得分:5)

您的问题的简短回答:您可以通过针对featureA重新设置master(但不要推送)来执行相反的操作,并将featureA重置为该点。

这实际上是将master从master提交到featureA,缺点是你最终会在两个分支上重复提交。它将解决您的直接问题(如果这是您的意图),但从长远来看,您不应该重新定位已经被推送到远程分支的提交。您的方案中的最佳解决方案实际上是合并。