用Git提交代码时,遇到“推不上去”的情况太常见了。明明本地commit成功了,一执行git push就卡住,甚至弹出一堆英文报错,看着就头大。其实大多数问题都有固定套路可查。
远程分支有更新,需要先拉取
你在写代码的时候,同事可能已经push过新提交。这时候你的本地分支就落后了,Git为了防止覆盖别人的改动,会拒绝你的推送。
看到类似rejected - non-fast-forward的提示,基本就是这个原因。解决办法很简单,先拉取最新代码:
git pull origin main
如果合并时出现冲突,处理完再add、commit,然后重新push。
分支名写错了
有时候手快,分支名打错一个字母,比如把main写成mian,Git会提示找不到远程分支。
确认当前分支:
git branch
查看远程分支列表:
git branch -r
确保你推的是对的分支,比如:
git push origin main
没权限推送
公司项目或私有仓库,不是谁都能随便push的。如果你连不到远程仓库,或者提示Permission denied,可能是SSH密钥没配好,或者账号没被加入协作者。
检查是否用了正确的SSH地址:
git remote -v
如果是HTTPS方式,可能需要重新输入用户名密码;SSH方式则要确认~/.ssh/id_rsa.pub有没有加到GitHub或GitLab账户里。
网络或代理问题
在公司网络下,有时会因为代理设置导致连接不上Git服务器。尤其是用GitLab或自建仓库时,容易超时。
可以尝试ping一下仓库地址,或者临时关闭代理:
git config --global --unset http.proxy
也有可能是防火墙拦了SSH端口(默认22),这时候可以改用HTTPS协议临时顶一下。
本地没关联远程分支
新建分支后直接commit,但没设置上游分支,push时就会失败。Git不知道该推到哪去。
第一次推送时可以用:
git push -u origin feature/login
加上-u参数,就把本地分支和远程关联起来了,下次直接git push就行。
提交记录乱了,强行推送危险
有人图省事,想用git push --force硬推,虽然能解决问题,但会覆盖别人代码,团队协作中非常危险。
除非你明确知道自己在做什么,否则建议用--force-with-lease,它会检查别人有没有新提交,相对安全些。
遇到推不上去的情况,别慌,按顺序排查:分支对不对、权限有没有、网络通不通、本地是不是落后了。多数问题几分钟就能搞定。