Git变基后推送遭拒,已发布分支如何更新?
解决Git推送non-fast-forward错误的安全做法
嘿,别慌,我来帮你捋清楚这个问题!
首先咱们搞明白为什么会触发这个错误:你刚才对本地develop分支执行了rebase upstream/master,这个操作会把你分支上的所有提交“搬移”到上游最新的master分支顶端,相当于改写了本地分支的提交历史。而你远程仓库(origin/develop)里的分支还是原来的旧历史,两者的提交记录已经分叉,Git自然拒绝了普通推送——因为它没法用“快进”(fast-forward)的方式把远程分支同步到你本地的状态。
你的最优解决方案:安全强制推送
因为这个develop分支是你个人fork里的专属分支,只有你在维护,没有其他人往上面提交代码,所以你可以用安全的强制推送覆盖远程分支的旧历史,命令如下:
git push --force-with-lease origin develop
为什么选--force-with-lease而不是直接--force?因为它会先检查远程分支有没有其他人的新提交,如果有就会推送失败,能避免不小心覆盖别人的工作,比粗暴的--force安全得多。
后续注意事项
- 这次推送成功后,你的远程
develop分支就会和本地保持一致,后续如果只是正常提交代码(没有再做rebase、修改历史的操作),直接用普通的git push就行。 - 你的PR是提交给上游项目的,这次强制推送只会更新你自己fork里的分支,不会影响上游仓库,你的PR依然有效,上游维护者能看到你最新的变更。
内容的提问来源于stack exchange,提问作者ian




