更换SSH密钥后Git提交仍显示错误提交者身份是什么原因?
问题根源
你遇到的情况和SSH密钥配置无关,是混淆了两个独立的Git/GitHub机制:
- SSH密钥仅用于校验你是否有仓库的推送权限,你用
zshap对应的密钥推送,权限校验通过所以可以正常推送私有仓库,这部分你的配置完全正常 - 提交记录的作者信息是本地Git配置的
user.name和user.email字段,和SSH授权没有任何关联。GitHub会根据提交信息里的邮箱,匹配平台上绑定了该邮箱的账号显示对应头像和用户名,所以哪怕你用zshap的权限推送,只要提交邮箱绑定的是zackshapiro账号,就会显示该账号为提交作者。
解决步骤
1. 修正当前仓库的提交者配置
进入出问题的仓库目录,执行以下命令查看当前配置:
git config user.name git config user.email
输出大概率是zackshapiro的账号信息,执行以下命令修改为zshap的对应信息,注意邮箱必须是zshap账号已验证过的邮箱:
git config user.name "zshap" git config user.email "zshap绑定的GitHub邮箱"
如果需要修改全局默认配置(所有未单独设置的仓库都使用该配置),加上--global参数即可:
git config --global user.name "你的默认用户名" git config --global user.email "你的默认邮箱"
2. 修正已提交的错误作者信息
如果需要修改最近一次提交的作者,执行:
git commit --amend --author="zshap <zshap的GitHub邮箱>" --no-edit
如果需要批量修改历史多个提交的作者,可以使用git filter-branch或者交互式rebase操作。
3. (可选)按目录自动切换账号配置
如果需要频繁切换两个账号的仓库,可以通过Git的includeIf功能实现按目录自动加载对应账号配置,避免每次手动修改:
- 新建两个单独的配置文件:
~/.gitconfig-zshap内容:
[user] name = zshap email = zshap的GitHub邮箱~/.gitconfig-personal内容:
[user] name = zackshapiro email = zackshapiro的GitHub邮箱 - 在全局
~/.gitconfig中添加如下配置,假设你的zshap相关仓库都放在~/work/zshap/目录下,个人账号仓库都放在~/personal/目录下:[includeIf "gitdir:~/work/zshap/"] path = ~/.gitconfig-zshap [includeIf "gitdir:~/personal/"] path = ~/.gitconfig-personal
配置完成后,进入对应目录下的仓库会自动加载对应账号配置,不会再出现作者串用的问题。
内容的提问来源于stack exchange,提问作者Zack Shapiro
相关产品推荐
相关产品推荐

