在写代码的过程中,提交代码失败是不少开发者都遇到过的问题。尤其是刚入门的新手,面对命令行里一堆红色错误提示,很容易懵。其实大多数情况都有对应的解决办法,关键是要看懂报错信息。
先看错误类型
当你执行 git push 提交代码时,如果失败,终端通常会返回一段错误说明。比如出现 remote: Permission denied,这多半是权限问题。可能是你没登录账号,或者 SSH 密钥没配置好。这时候别急着重试,先检查你的 Git 账号绑定情况。
如果是 non-fast-forward updates were rejected,说明远程分支有新的提交,而你的本地版本落后了。这种情况很常见,比如同事先提交了代码,你再推就会被拒。解决办法是先拉取最新代码:
git pull origin main
合并完冲突后再提交,一般就能通过。
本地修改和远程冲突
有时候你改了某个文件,别人也改了同一个文件,Git 不知道该保留谁的,就会提示冲突。打开对应文件,你会看到类似这样的内容:
<<<<<<< HEAD
print("Hello World")
======
print("Hi there")
>>>>>>> abc1234
你需要手动删掉不需要的部分,保留正确的代码,保存后重新 add 和 commit:
git add .
git commit -m "resolve conflict"
git push origin main
网络或仓库地址问题
还有一种情况是你根本连不上远程仓库。比如公司网络限制了 Git 端口,或者你用的是 HTTPS 地址但公司要求走代理。可以试试切换协议:
git remote set-url origin git@github.com:username/repo.git
或者配置代理:
git config --global http.proxy http://proxy.company.com:8080
分支保护规则阻止提交
现在很多项目开启了分支保护,比如 main 分支不允许直接推送。你可能会看到 protected branch hook declined 这类提示。这时候不能硬推,得走 Pull Request 流程。新建一个功能分支:
git checkout -b feature/login
然后去 GitHub 或 GitLab 页面发起合并请求,等审核通过才能进主干。
临时解决方案:强制推送要小心
有人图省事直接加 --force 强推:
git push --force origin main
这招虽然能解决问题,但风险很大,可能覆盖别人的提交。除非你非常确定后果,否则别这么干。可以用 --force-with-lease 代替,相对安全些。
检查 Git 配置是否正确
有时候问题出在你自己身上。比如邮箱写错了,或者用户名没设。查看当前配置:
git config --list
确保 user.name 和 user.email 是你自己的有效信息。不然提交记录会显示异常,团队协作时容易引起误会。
磁盘空间或文件过大
如果你不小心把日志文件、虚拟机镜像这类大文件加进仓库,Git 可能会在推送时中断。远程服务器通常对单次提交大小有限制。可以用下面命令查哪些文件占空间:
git rev-list --objects --all | sort -k 2 > all-revs.txt
git gc && git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5
找到大文件后,用 git rm --cached 移除,并加进 .gitignore 防止再次误提交。