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

ben*_*n39 7 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
Run Code Online (Sandbox Code Playgroud)

同时有几个新的提交被推到了原点大师

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.
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*ruk 9

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

如果您不想强制,您唯一的替代方法是合并.

如果你单独工作并且不需要让其他人承诺进入这个分支,强制就不那么糟糕了.


pru*_*wan 5

对你的问题的一个简短回答:你可以反过来通过针对featureA重新设置master(但是还没有推送),并将featureA重置为该点.

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