You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动