必须清空全局 user.name 和 user.email,否则工具可能忽略 local 配置导致 commit 作者错误;ssh 密钥命名需仅用小写字母、数字、下划线且不以数字开头;~/.ssh/config 的 host 必须与 remote url 中 @ 后域名完全一致;clone 不继承 user 配置,每个仓库须手动设置 local user.name 和 user.email。

必须先清空全局 user.name 和 user.email
留着 git config --global user.name 会导致所有仓库默认套用同一作者信息,哪怕你后面在某个仓库里执行了 git config --local user.name,VS Code、GitHub Desktop 等工具仍可能跳过 local 配置直接读 global,结果 push 到 GitHub 的 commit 却显示成 GitLab 账号名。
执行以下命令彻底清除:
git config --global --unset user.namegit config --global --unset user.email- 再跑
git config --global --list确认输出里已没有user.name或user.email
清完之后,每个仓库都得进目录单独配一次 git config --local user.name 和 git config --local user.email,没配的仓库 commit 会失败或报 “empty ident” 错误。
SSH 密钥命名和生成要避开 Windows 文件名陷阱
Windows 下的 Git for Windows(尤其是旧版)对私钥文件名敏感:id_rsa.github、id-rsa-gitee、01_gitlab 这类含点、短横、数字开头的文件名大概率被忽略,导致 ssh -T git@github.com 仍走默认密钥,报 Permission denied (publickey)。
安全写法只用小写字母 + 数字 + 下划线,且不以数字开头:
- ✅ 正确:
ssh-keygen -t rsa -C "me@github.com" -f ~/.ssh/id_rsa_gh - ✅ 正确:
ssh-keygen -t rsa -C "me@gitee.com" -f ~/.ssh/id_rsa_gee - ❌ 错误:
ssh-keygen -t rsa -C "me@gitlab.com" -f ~/.ssh/id_rsa.gitlab
生成时 passphrase 直接回车空过——否则每次 git push 都弹窗输密码,除非公司策略强制要求。
~/.ssh/config 的 Host 必须和 git remote URL 完全匹配
SSH 不解析 URL 路径,只取 @ 后第一个词做 Host 匹配。比如你的 remote 是 git@github.com:owner/repo.git,那 config 里必须写 Host github.com;如果写成 Host mygh,但 remote 没改成 git@mygh:owner/repo.git,就完全不生效。
典型 config 写法(注意大小写、域名拼写、路径斜杠):
# GitHub 主账号 Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa_gh PreferredAuthentications publickey <h1>Gitee 小号</h1><p>Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_rsa_gee PreferredAuthentications publickey</p>
验证是否生效:ssh -T git@github.com 应返回 Hi xxx! You've successfully authenticated...;若仍报错,先检查 ssh-add -l 是否已加载对应私钥。
仓库级 user 配置不能靠 clone 后自动继承
很多人以为 clone 完一个 GitHub 仓库后,它就会“记住”该平台身份——不会。Git 从不根据 remote 域名自动设 user.name,它只按配置层级(system → global → local)逐级 fallback。global 清空后,local 层就是空白,第一次 git commit 会直接失败。
进仓库后必须手动设:
git config --local user.name "your_github_name"git config --local user.email "your_github_email@example.com"- 检查是否写入:
cat .git/config,确认[user]块出现在文件末尾而非 global 配置里
别指望 IDE 自动帮你填——IntelliJ/VS Code 只读配置,不写配置。漏配一个仓库,那个仓库的每次 commit 都会用错身份,且历史无法撤销。











