将项目推送到GitHub仓库时出现main分支推送被拒绝([rejected])错误,该如何解决?
解决Git推送时「! [rejected] main -> main (fetch first)」的错误
嘿,这个问题我之前协作开发时经常碰到,其实本质就是远程仓库有你本地没有的更新——可能是小伙伴推了新内容,也可能是你在别的设备提交过代码没同步回来。Git怕直接推送会覆盖这些变更,所以干脆把你的请求拒了。下面给你分场景一步步解决:
常规场景:保留本地修改并合并远程变更
第一步:拉取远程最新代码到本地
打开终端执行这条命令,把远程分支的内容同步到本地:git pull origin main(如果你的工作分支不是main,把命令里的
main换成你的分支名就行,比如dev)
这条命令会自动把远程变更拉下来,和你本地的代码合并。第二步:处理合并冲突(如果有的话)
如果远程修改和你的本地改了同一个地方,Git会提示冲突文件。打开这些文件,你会看到类似这样的标记:<<<<<<< HEAD 你本地写的代码内容 ======= 远程仓库的代码内容 >>>>>>>> 8a32f4d... 远程提交的说明文字手动调整内容(保留需要的部分),删掉这些冲突标记。处理完后执行:
git add <冲突文件名> git commit -m "解决合并冲突,同步远程变更"第三步:重新推送代码
合并完成后,再执行推送就没问题了:git push origin main
特殊场景:放弃本地修改,直接同步远程代码
如果你确定本地的修改不重要,或者想完全用远程代码覆盖本地(谨慎操作!这个会丢失所有本地未推送的修改),可以这么做:
- 先拉取远程最新代码但不合并:
git fetch origin main - 把本地分支强制重置为远程分支的状态:
git reset --hard origin/main - 最后推送(此时本地和远程完全一致,推送会直接成功):
git push origin main
小提醒
平时推送代码前,最好先跑一遍git pull同步下远程状态,尤其是多人协作的项目,能避免大部分这类冲突问题~
内容的提问来源于stack exchange,提问作者firatinlkc




