Git Push 报 403 Forbidden 是因本地凭据过期或错配,需在 Windows 凭据管理器或 macOS 钥匙串中删除对应 git:https://xxx 条目,再执行 git push 触发重新认证。

Git Push 报 403 Forbidden 是凭据过期或错配,不是网络或仓库配置问题
VSCode 内置的 Git 集成走的是系统 Git,但凭据(尤其是 Windows 上)常被系统凭据管理器(Windows Credential Manager)缓存。一旦账号换过密码、启用了 2FA、或从 HTTPS 切到 SSH 后没清理旧凭据,git push 就会卡在 403 Forbidden —— 它根本没机会连上远程服务器验证权限,只是拿了个失效 token 或旧密码反复重试。
这不是 VSCode 的 bug,也不是 GitHub/GitLab 自己的问题,而是本地凭据层“记错了人”。
Windows 上必须清空 git:https://github.com 这类凭据条目
很多人只删了浏览器里的登录态,或以为重装 VSCode 就行,其实没用。关键路径在 Windows 凭据管理器里,且条目名是带协议和域名的完整字符串,比如:
git:https://github.comgit:https://gitlab.comgit:https://your-company.gitlab.internal
这些条目藏在「Windows 凭据管理器 → 普通凭据」里,手动找、手动删。别点「编辑」,直接「删除」—— 编辑有时会保存空值,反而让 Git 继续用坏凭据。
删完后,在终端里执行一次 git push,Git 会弹出新登录窗口(GitHub 登录页或系统认证框),这时输对账号密码(若开了 2FA,得用 Personal Access Token 替代密码)。
Mac 上对应清理 github.com 在钥匙串里的 git-credential-osxkeychain 条目
Mac 用户容易忽略钥匙串里有同名但不同访问权限的多个条目。打开「钥匙串访问」App,搜索 github.com,重点删以下几类:
- 类别为
internet password、名称含git-credential-osxkeychain的条目 - 协议为
https、服务器为github.com(或你用的其他 Git 托管域名)的条目 - 如果用 GitHub CLI 或 VSCode 的 GitHub 扩展,还可能有
github-vscode-auth类条目,一并删掉
删完后同样触发一次 git push,系统会重新拉起认证流程。注意:macOS 14+ 对 git-credential-osxkeychain 的调用更严格,旧版脚本可能失效,建议确保已安装最新版 Xcode Command Line Tools。
避免下次再踩坑:统一用 gh auth login 或 git config --global credential.helper
手动删凭据是救急,长期靠它等于天天修水管。两个更稳的路子:
- 用 GitHub CLI:
gh auth login登录后,它会自动配置好凭据 helper,并支持 token 自动刷新。VSCode 的 Git 操作会继承这个上下文 - 显式指定 helper:
git config --global credential.helper osxkeychain(Mac)或git config --global credential.helper manager-core(Windows),而不是依赖默认值
特别注意:如果你同时用多个 GitHub 账号(比如公司和个人),不要全局设 credential.helper,改用 git config --local 在每个仓库单独配,否则又会混。
最麻烦的其实是 Git 子模块或 CI 环境里残留的凭据缓存,那得进 Docker 容器或 runner 环境里单独清——但那是另一个故事了。










