疑问:新GitHub账户为何可推送代码至旧账户仓库?
问题原因
Git里的user.name和user.email只是用来标记提交记录的作者信息,和GitHub的权限认证完全是两回事。你能顺利用账户B推送到账户A的仓库,本质是本地还在使用旧账户A的验证凭据,和你改的全局Git配置没关系。
解决方法
如果你用的是HTTPS连接仓库
- 先清理本地保存的旧凭据:
- Windows:打开「控制面板→用户账户→凭据管理器→Windows凭据」,找到GitHub相关的条目删除
- macOS:打开「钥匙串访问」,搜索GitHub,删除对应的旧账户凭据
- Linux:直接删除
~/.git-credentials文件
- 下次推送时,会提示你输入账户B的用户名和个人访问令牌(PAT),输入后就会用账户B的权限进行验证
如果你用的是SSH连接仓库
- 先确认当前SSH验证的账户:运行
ssh -T git@github.com,终端会显示当前用的是哪个账户 - 如果显示的是账户A,说明本地默认用的还是关联A的密钥:
- 为账户B生成新SSH密钥:
ssh-keygen -t ed25519 -C "账户B的邮箱地址" - 登录GitHub账户B,在「Settings→SSH and GPG keys」里添加新生成的公钥
- 配置SSH config文件(路径
~/.ssh/config),区分两个账户的密钥:Host github-com-A HostName github.com User git IdentityFile ~/.ssh/id_ed25519 # 旧账户A的密钥路径 Host github-com-B HostName github.com User git IdentityFile ~/.ssh/id_ed25519_b # 新账户B的密钥路径 - 之后操作仓库时,用对应Host替换原地址:比如账户A的仓库地址改成
git@github-com-A:A账户名/仓库名.git,账户B的改成git@github-com-B:B账户名/仓库名.git
- 为账户B生成新SSH密钥:
额外建议
如果需要频繁切换账户,别依赖全局配置,直接给单个仓库单独设置作者信息:
进入目标仓库目录后运行:
git config user.name "账户B用户名" git config user.email "账户B邮箱"
这样提交记录的作者信息会和当前仓库对应的账户匹配。
内容的提问来源于stack exchange,提问作者awoldt
相关产品推荐
相关产品推荐

