在用Gitref="/tag/245/" style="color:#8B0506;font-weight:bold;">提交代码时,遇到“rejected”提示挺让人头疼的。明明代码写得好好的,一推就出问题,还卡着不能交差。其实这种情况很常见,特别是在团队协作开发中,搞清楚原因后处理起来并不难。
为什么会被拒绝提交?
最常见的原因是远程仓库的进度比你本地的更新。比如同事先push了新代码,而你本地没有同步这些变更,这时候直接提交就会被拒。系统会提示类似这样的信息:
! [remote rejected] main -> main (non-fast-forward)
说白了就是你的本地分支落后了,Git 不允许直接覆盖别人的提交。
怎么解决?先拉再推
最简单的办法是先把远程的最新代码拉下来合并。执行下面这条命令:
git pull origin main
如果本地有未提交的更改,Git 会尝试自动合并。只要没冲突,拉下来之后再push就没问题了。
遇到合并冲突怎么办?
有时候pull之后会提示文件冲突,尤其是多人改了同一行代码。这时候Git不知道该留谁的,得手动处理。打开标出冲突的文件,你会看到类似这样的内容:
<<<<<<< HEAD
print("Hello World")
======
print("Hello Git")
>>>>>>> abc1234... Update script.py
删掉不需要的部分,保留正确的代码,保存后执行:
git add .
git commit -m "resolve merge conflict"
git push origin main
强制推送?小心使用
有些人图省事直接用 git push --force 强行推送,虽然能解决问题,但可能覆盖别人的工作成果,影响团队协作。除非你非常确定自己在做什么,比如修复了自己的错误提交,否则别轻易用这个命令。
养成好习惯,减少rejected发生
每次准备push前,顺手执行一次 git pull,相当于检查一下有没有遗漏更新。就像出门前看一眼有没有带钥匙,花不了几秒,能省下不少麻烦。特别是周五下午赶着提交代码的时候,更别偷懒。
另外,如果项目用了保护分支(比如main分支不允许直接push),就得走PR(Pull Request)流程。这时候被拒不是出错,而是正常流程,按要求提申请就行。