Git 提交推送总失败?从凭证、分支到钩子的全链路排查

Git 的报错信息常让人摸不着头脑:同样是失败,可能是账号密码错,也可能是分支被保护,甚至是本地钩子拦了你。本文按出现频率梳理最常见的几类失败,并给出可直接照做的修复步骤。

一、认证失败:remote: Invalid username or password

现代代码托管几乎都禁用了明文密码,必须用令牌(token)。排查:

  1. 确认用的是个人访问令牌而非登录密码;GitHub/GitLab 在 2021 年后均要求 token。
  2. Windows 凭据管理器里可能缓存了旧密码:打开『凭据管理器 → Windows 凭据』,删掉 git:https://... 条目,下次推送重新输入。
  3. 用 SSH 可一劳永逸:生成 ssh-keygen -t ed25519,把公钥加到账户,并把 remote 改为 git@host:user/repo.git

二、non-fast-forward:本地落后于远端

  1. 报错含 failed to push some refsnon-fast-forward,说明别人已推送新提交。
  2. git pull --rebase 把本地提交变基到最新,再 git push
  3. 若 pull 报冲突,逐文件解决后 git addgit rebase --continue

三、分支被保护或权限不足

直接向 main/master 推送常被服务端拒绝。此时应:

  1. 新建特性分支:git checkout -b feature/x,推到远端后再走合并请求(MR/PR)。
  2. 若是权限问题,报错通常含 remote: You are not allowed to push,需联系仓库管理员授权。

四、pre-commit / pre-push 钩子拦截

  1. 钩子报错形如 husky - pre-commit hook failed,本质是本地检查未过(如 lint、测试)。
  2. 先读钩子输出,修复对应问题;确属误报可 git commit --no-verify 临时绕过,但需谨慎。

五、大文件与配额限制

单个文件超过托管限制(如 GitHub 100MB)会拒绝。应改用 Git LFS:git lfs installgit lfs track '*.psd',再提交;已误提交的需 git filter-repo 清理历史。

技术小结:Git 推送失败先读完整报错首行,分清『认证 / 落后 / 权限 / 钩子 / 体积』五类,再对症下药。养成『先 pull –rebase 再 push、用令牌与 SSH』的习惯,可规避八成问题。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注