执行git push时出现报错,但远程仓库显示推送已成功
问题原因与解决办法
为什么会出现这个情况
你执行git push时,Git采用了旧版默认的matching推送模式——这个模式会推送所有本地与远程同名的分支。这次操作中:
- 你的
ak-tinkering分支和远程分支同步正常,成功推送(所以远程仓库能看到该分支的更新) - 但本地
master分支的提交进度落后于远程master分支(也就是提示里的non-fast-forward),Git拒绝直接推送这个分支,因此出现“无法推送某些refs”的错误。
错误提示的含义拆解
! [rejected] master -> master (non-fast-forward):本地master分支的最新提交早于远程master的提交,直接推送会覆盖远程的更新,Git出于安全考虑拒绝了这个操作。- 开头的
push.default警告:Git 2.0之后将默认推送模式从matching改为simple,simple模式只会推送当前所在的分支,能避免这种“部分分支成功、部分失败”的问题,所以提示你配置该选项。
解决步骤
1. 修复默认推送模式(推荐)
执行以下命令,将默认推送模式设为simple,以后git push只会推送当前分支:
git config --global push.default simple
2. 如果需要推送master分支
如果确实要更新远程master,先拉取远程的最新更新合并到本地,再推送:
# 切换到master分支 git checkout master # 拉取远程master的更新并合并 git pull origin master # 若合并时出现冲突,手动解决冲突后提交 git add . git commit -m "解决合并冲突" # 推送本地master到远程 git push origin master
3. 若不需要推送master分支
只需完成步骤1的配置,以后执行git push时只会推送当前所在的分支(比如你之前的ak-tinkering),不会再尝试推送master,也就不会出现这个错误。
内容的提问来源于stack exchange,提问作者dapple-putt-poultry
相关产品推荐
相关产品推荐

