You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

疑问:新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的密钥:
    1. 为账户B生成新SSH密钥:ssh-keygen -t ed25519 -C "账户B的邮箱地址"
    2. 登录GitHub账户B,在「Settings→SSH and GPG keys」里添加新生成的公钥
    3. 配置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的密钥路径
      
    4. 之后操作仓库时,用对应Host替换原地址:比如账户A的仓库地址改成git@github-com-A:A账户名/仓库名.git,账户B的改成git@github-com-B:B账户名/仓库名.git
额外建议

如果需要频繁切换账户,别依赖全局配置,直接给单个仓库单独设置作者信息:
进入目标仓库目录后运行:

git config user.name "账户B用户名"
git config user.email "账户B邮箱"

这样提交记录的作者信息会和当前仓库对应的账户匹配。

内容的提问来源于stack exchange,提问作者awoldt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:22:09