IntelliJ IDE中Git提交归属正确但推送显示为其他用户的问题求助
这种提交身份和推送身份对不上的情况我之前也踩过坑,其实Git里提交身份和推送身份是完全独立的两个机制:提交靠本地Git配置的user.name/user.email,而推送则取决于你连接Git服务器时的身份验证方式(SSH密钥对应服务器用户,或HTTP认证账号)。结合你的情况,咱们一步步排查:
1. 先确认推送时服务器识别的用户是谁
先在终端执行这条命令,直接测试SSH连接的身份:
ssh -T git@你的Git服务器地址
比如返回Hi User1! You've successfully authenticated...,那就说明当前你的SSH连接被服务器识别成了User1——这就是问题根源,和你本地的提交配置无关。
2. 排查本地SSH密钥的使用逻辑
检查SSH配置文件
打开本地的SSH配置文件(Linux/macOS是~/.ssh/config,Windows是C:\Users\你的用户名\.ssh\config),看有没有针对你的Git服务器的专属配置,是不是指定了错误的密钥文件:
Host your-git-server HostName xxx.xxx.xxx.xxx User git IdentityFile ~/.ssh/user1_id_rsa # 这里如果是User1的密钥就错了
如果有这种配置,把IdentityFile改成你自己的私钥路径,比如~/.ssh/my_id_rsa。
检查SSH代理缓存的密钥
如果你用了ssh-agent管理密钥,可能缓存了User1的密钥,导致优先用它连接:
- 先查看当前加载的密钥指纹:
ssh-add -l - 找到User1对应的指纹,删掉它:
ssh-add -d 对应指纹 - 再添加你自己的密钥:
ssh-add ~/.ssh/my_id_rsa
3. 检查IntelliJ的Git/SSH配置
IntelliJ有时候会用自己独立的SSH配置,和系统的不统一:
- 打开
Settings → Version Control → Git,看SSH executable选项:- 如果选的是
Native,它会用系统的SSH配置,那你按照上面的系统SSH配置修改就行; - 如果选的是
Built-in,去Settings → Tools → SSH Configurations,找到对应Git服务器的配置条目,确认Authentication type选的是Key pair,并且私钥路径是你自己的密钥文件。
- 如果选的是
- 另外,如果你之前用过HTTP方式推送,IntelliJ可能保存了旧的认证信息:去
Settings → Appearance & Behavior → System Settings → Passwords,找到对应Git服务器的密码条目删掉,重新推送时会提示你输入正确的账号密码(如果是HTTP认证的话)。
4. 确认Git服务器端的密钥绑定
如果上面的排查都没问题,那可能是服务器端的配置错了:联系Git服务器管理员,检查你的SSH公钥是不是被错误添加到了User1的账号下,而不是你自己的账号。服务器是根据公钥绑定的用户来识别推送身份的,这个环节错了的话,无论你本地怎么改都没用。
5. 临时验证方法
你可以在终端用指定密钥的方式手动推送,来定位问题:
GIT_SSH_COMMAND="ssh -i ~/.ssh/my_id_rsa" git push
如果这次推送归属变成了你,说明是IntelliJ的SSH配置没选对密钥;如果还是显示User1,那肯定是服务器端的密钥绑定有问题。
内容的提问来源于stack exchange,提问作者Guy Cohen

