git push 报错怎么解决?7 个常见 rejected / permission denied 原因和修复
git push 报错先看关键行再动手:rejected non-fast-forward、Permission denied publickey、密码认证已移除要用 PAT、unrelated histories、large files、no upstream——7 个最常见 git push 报错的真实原因和修复命令,附 Codex 工作流。
Published: 2026-06-01 / Updated: 2026-06-25
git push 失败时,别急着 --force(强推会覆盖别人的提交)。先看报错的第一行关键句——git 的报错很明确,几乎一句话就能定位是远程比你新、是权限不对、还是认证方式过期。
下面是 7 个最常见的 git push 报错、真实成因和对应命令,最后讲怎么用 Codex 辅助 GitHub 工作流。
第一步:按报错关键句对号入座
! [rejected] ... (fetch first)/non-fast-forward→ 远程比你新(见 ①)Permission denied (publickey)→ SSH 密钥(见 ②)Support for password authentication was removed→ 要用 PAT(见 ③)failed to push some refs→ 通常是 ① 的连带(见 ④)refusing to merge unrelated histories→ 两个无关历史(见 ⑤)remote: error: ... File ... is XXX MB; this exceeds GitHub's file size limit of 100 MB→ 大文件(见 ⑥)fatal: The current branch has no upstream branch→ 没设上游(见 ⑦)
① ! [rejected] non-fast-forward(远程比你新,最常见)
成因:你 push 之前,远程已经有别的提交(你或队友在网页/别处提交过),本地落后,git 拒绝覆盖。
修复:先把远程拉下来再推,别直接 --force:
git pull --rebase origin main
# 解决可能的冲突后
git push origin main
② Permission denied (publickey)(SSH 密钥问题)
成因:用 SSH 地址(git@github.com:...)但本机没配 SSH key,或 key 没加到 GitHub。
修复:
ssh -T git@github.com # 测试连接
ssh-keygen -t ed25519 -C "你的邮箱" # 没有就生成
cat ~/.ssh/id_ed25519.pub # 把这串公钥加到 GitHub → Settings → SSH keys
③ Support for password authentication was removed(密码认证已移除)
成因:GitHub 早已不支持用账号密码 push HTTPS。要用 Personal Access Token(PAT) 当密码。
修复:GitHub → Settings → Developer settings → Personal access tokens 生成 token,push 时密码处粘贴这个 token。token 等于密码,别提交进代码或公开。
④ failed to push some refs(推送被拒)
成因:这是个笼统提示,90% 是 ① 的非快进,少数是分支保护规则。
修复:先按 ① 处理(git pull --rebase 再 push);如果是受保护分支,按仓库规则走 PR 而不是直接 push 到 main。
⑤ refusing to merge unrelated histories(无关历史)
成因:本地仓库和远程仓库是各自独立初始化的(比如远程建仓时勾了 README),两边没有共同祖先。
修复:
git pull origin main --allow-unrelated-histories
# 解决冲突后再 push
⑥ GitHub 大文件超 100MB(large files detected)
成因:提交里有超过 100MB 的文件(视频、模型、打包产物),GitHub 直接拒收;而且文件已经进了历史,删了再提交也没用。
修复:用 Git LFS 管理大文件,或把大文件从历史里移除:
# 先把它加进 .gitignore,再从历史移除(谨慎,会改写历史)
git rm --cached 大文件路径
echo "大文件路径" >> .gitignore
模型、数据集、构建产物这类,本来就不该进 git。
⑦ no upstream branch(没设上游分支)
成因:新建的本地分支第一次 push,没告诉 git 推到远程哪个分支。
修复:
git push -u origin 你的分支名 # -u 一次设好上游,以后直接 git push
让 Codex 辅助 GitHub 工作流
Codex 适合帮你解释报错、起草提交信息、写 PR 描述,但 push、合并、改历史这类操作要你自己确认:
这是我的 git push 报错:[贴完整报错]
请判断是哪类问题(远程更新 / 权限 / 认证 / 大文件),给出验证和修复命令,
任何会 --force 或改写历史的命令都要单独标注风险,先别直接执行。
正确顺序永远是:建分支 → 小步提交 → push → 开 PR → 看 diff 再合,别把 AI 生成代码直接推 main。
可以复制的诊断记录
git push 报错诊断记录
报错第一行:
远程地址(SSH git@ / HTTPS https):
是否已 git pull --rebase:
认证方式(SSH key / PAT):
是否涉及大文件:
当前分支 / 目标分支:
下一步:
风险提醒
git push --force会覆盖远程提交,多人协作时几乎不要用;非要用也用--force-with-lease。- PAT、SSH 私钥、token 等同密码,别提交进仓库、别公开。客户私有仓库的权限改动先确认授权。
相关工具
相关报错排查
同一套排查思路的常见报错,建议一起看:
免责声明
本文中的报错信息与修复对应 git 与 GitHub 官方行为,供学习和排查参考;具体项目涉及客户私有仓库、权限、token 时,需明确授权并人工复核。
读完后可以直接用的工具
根据这篇文章的主题自动匹配,先用工具做判断,再人工复核交付。
SEO path
Continue through the same topic network
Use a practical tool after reading this guide
先用工具做判断,再用模板整理交付。生成内容只能作为草稿,不要不审核就直接发给客户。
Related articles
需要人工协助配置或排错?
你可以先用本站工具和模板自助排查。若确实卡在 Codex、Claude Code、GitHub、Vercel 配置或客户需求判断上,可以通过联系页咨询。服务不是主业入口,只作为少量高价值人工协助保留。
联系我