根本原因是系统凭据管理器缓存旧账号凭证,需清除Windows凭据管理器中git:https://开头的条目或macOS钥匙串中对应git-credential条目,并执行git credential reject清空Git内存缓存,再通过git push触发新认证,且密码栏须粘贴Personal Access Token而非账户密码。

VSCode切换Git账号后提交报“无权限访问”,根本不是账号没登对,而是系统凭据管理器里还存着旧账号的 token 或密码,Git 拿着它去敲新账号的门——直接被拒。
怎么确认是凭据缓存惹的祸
别急着改配置或重装。先看两个关键信号:
- 终端里执行
git remote -v显示的是https://开头的地址(说明走 HTTPS 协议,依赖系统凭据) - 你刚在 VSCode 里登了新账号,但点推送还是弹错,或者压根不弹窗、直接报
403 Forbidden或Authentication failed - 用
ssh -T git@github.com测试返回成功,但 HTTPS 推送仍失败——说明 SSH 和 HTTPS 凭据没同步,冲突了
Windows:删干净凭据管理器里的 git:https:// 条目
VSCode 不自己存密码,它调用系统 Git,而 Windows 默认把 HTTPS 凭据塞进「凭据管理器」。这里藏得深,且名字很具体:
- 打开「凭据管理器」→「Windows 凭据」→「普通凭据」
- 找所有以
git:https://github.com、git:https://gitlab.com或你公司 Git 域名(如git:https://git.internal.company.com)开头的条目 - 逐个点开 → 点「删除」(别选「编辑」,空密码保存后 Git 会继续用坏凭据)
- 删完后,在终端执行一次
git push,Git 才会触发新认证弹窗
macOS:钥匙串 + git credential reject 双清
macOS 的钥匙串更隐蔽,常有多个同名条目共存,只删一个可能没用:
- 打开「钥匙串访问」→ 搜索
github.com(或你的 Git 域名) - 重点删三类:
internet password类型、名称含git-credential-osxkeychain、协议为https且服务器匹配的条目 - 删完后,**必须**在终端运行:
git credential reject,然后按提示输入:protocol=https host=github.com
(回车两次)——这步清的是 Git 自己的内存缓存,光清钥匙串不够
为什么输密码还失败?你该用 Personal Access Token
GitHub、GitLab 等平台早已停用账户密码直连 HTTPS Git。你现在输的“密码”,Git 实际发过去会被服务端直接拒绝,错误却显示成模糊的 Authentication failed:
- GitHub:去
Settings → Developer settings → Personal access tokens → Tokens (classic),生成新 token,至少勾选repo - GitLab:去
User Settings → Access Tokens,权限选api和read_repository - VSCode 弹窗里,用户名填你的账号名,**密码栏粘贴 token**(不是密码!)
- Token 泄露风险高,别存进脚本或提交到仓库;用完及时在平台页面
revoke
最常被忽略的一点:删完凭据后,VSCode 不一定会立刻弹新登录框——它可能还在用旧缓存静默尝试。关掉所有 VSCode 窗口,再打开,或手动在终端触发一次 git push,才能真正刷新认证链。否则你以为清完了,其实 Git 还在拿旧 token 硬撞。


















