本地提交了,但push不上远程仓库
写完代码,git add、git commit 一气呵成,信心满满地敲下 git push,结果卡住了——推不上去。这种情况太常见了,别急,先看看是不是下面这些情况在作怪。
1. 远程有更新,你没拉最新代码
最常见的情况是,别人已经往同一个分支 push 了新提交,而你的本地仓库不是最新的。Git 不允许直接覆盖别人的提交,会提示你先 pull。
hint: Updates were rejected because the remote contains work that you do
hint: not have locally.这时候不要强行覆盖,应该先拉取远程变更:
git pull origin main如果合并过程中出现冲突,解决后再 commit 并 push。
2. 分支名对不上
有时候你在本地建了个叫 feature-login 的分支,但远程没有这个分支,直接 git push 会失败。Git 新版本默认不会自动创建远程分支。
第一次推送时要用:
git push -u origin feature-login这样就把本地分支关联到远程同名分支。之后就可以直接用 git push 了。
3. 权限问题:没权限推送到仓库
如果你是团队项目的新成员,可能只有读权限,没有写权限。push 时会收到 permission denied 的错误。
检查一下你用的是 SSH 还是 HTTPS:
git remote -v如果是 HTTPS,可能需要输入账号密码;SSH 则依赖密钥。确认你的公钥是否已添加到 GitLab/GitHub 账户中。可以测试连接:
ssh -T git@github.com如果提示无法登录,说明 SSH 配置有问题。
4. 网络或代理问题
公司内网常有代理限制,push 的时候连不上远程服务器。你会看到超时或者 connection refused 的提示。
可以尝试 ping 一下 git 服务器:
ping github.com如果不通,检查是否开了代理。如果有设置过 git proxy,但现在已经不需要,记得取消:
git config --unset http.proxy
git config --unset https.proxy5. 提交历史冲突,被远程拒绝
你可能不小心 rebase 或 reset 过,导致本地提交历史和远程不一致。这时即使你 pull 也可能出错。
一种做法是强制推送(仅限你确定要覆盖):
git push --force-with-lease origin main注意:不要随便用 --force,容易把别人的提交搞丢,只在明确自己操作后果时使用。
6. 仓库地址错了
偶尔手滑,clone 的时候地址写错,或者后来改过 remote 地址,导致 push 到一个不存在或无效的仓库。
查看当前远程地址:
git remote get-url origin确认是否正确。如果不对,修改它:
git remote set-url origin https://github.com/username/repo.git7. 大文件或敏感内容被拦截
有些 Git 服务(比如 GitHub)对单个文件大小有限制(通常 100MB),超过就拒绝推送。另外,企业内部可能有钩子(hook)检测敏感信息,比如密钥、密码,一旦发现也会阻止 push。
看错误信息里有没有提到 file too large 或 forbidden content。如果是大文件,考虑用 Git LFS;如果是密钥泄露,赶紧删掉重新提交。