Git推送master分支遭拒:当前分支落后远程该如何解决?
问题解决步骤
核心原因
你本地的master分支提交历史和远程origin/master不一致——你在合并main到本地master前,没有拉取远程master的最新更新,导致本地master的提交不是远程master的直接后续,Git拒绝非快进式推送。而git pull没生效是因为本地master工作区干净,但提交历史和远程分叉了。
方案一:Rebase 保持提交历史线性(推荐用于生产分支)
- 切换到本地
master分支:git checkout master - 拉取远程
master的最新代码到临时分支temp:git fetch origin master:temp - 将本地
master的变更(你合并main的提交)变基到temp分支上,让本地提交成为远程最新提交的后续:git rebase temp master- 如果遇到冲突,手动解决冲突后,执行
git add <冲突文件>,然后继续变基:git rebase --continue - 重复操作直到变基完成
- 如果遇到冲突,手动解决冲突后,执行
- 推送更新后的本地
master到远程:git push origin master - 删除临时分支:
git branch -d temp
方案二:安全强制推送(谨慎使用)
如果你确认远程master的最新变更和你本地合并的内容没有冲突,可以用--force-with-lease安全强制推送(比直接--force更安全,会检查远程是否有未拉取的新提交):
git push origin master --force-with-lease
方案三:合并远程变更(会产生合并提交)
如果不在意提交历史有分叉,可以拉取远程master并合并到本地:
- 拉取远程
master并合并:git pull origin master- 解决冲突后执行
git add <冲突文件>,然后提交合并:git commit
- 解决冲突后执行
- 推送合并后的本地
master到远程:git push origin master
内容的提问来源于stack exchange,提问作者Dozel
相关产品推荐
相关产品推荐

