克隆仓库时怎么切换 Git 账号?手把手教你改用户名和邮箱

你在公司电脑上用 Git 克隆了一个,结果提交记录里显示的是前同事的用户名?或者在家写个人项目,一 push 就弹出权限错误,提示「Authentication failed」?别急,这不是 Git 坏了,而是本地 Git 配置的账号没换过来。

为什么克隆仓库会「记住」旧账号?

Git 本身不存密码,但会记两样东西:全局的 user.nameuser.email。这些信息被写进提交记录的 author 字段,GitHub、GitLab 等平台正是靠这个 email 匹配你的账户头像和权限。你 clone 下来的仓库,用的还是上次配置的账号——哪怕你压根没动过它。

查一查当前用的是谁

打开终端,进任意目录,执行:

git config --global user.name
git config --global user.email

如果输出是「zhangsan」和「zhangsan@company.com」,但你现在想用「lisi」提交个人项目,就得改。

改法分两种:全局改 or 项目单独改

推荐做法:按项目设账号(避免公司项目和个人项目混用)
进到你要操作的仓库目录,比如:cd ~/my-personal-blog,然后执行:

git config user.name "李四"
git config user.email "lisi@gmail.com"

注意:这里没加 --global,所以只影响当前这个文件夹下的仓库。再用 git config user.name 查,就能看到刚设的值。

顺便解决「push 报错:Permission denied」

账号名和邮箱只是提交记录的「署名」,真正决定能不能 push 的是 SSH 密钥或 HTTPS 凭据。如果你用的是 HTTPS 地址(比如 https://github.com/xxx/repo.git),系统可能缓存了旧账号的密码或 token。

Mac 用户清缓存:

git credential reject
protocol=https
host=github.com
[press Enter twice]

Windows 用户打开「凭据管理器」→「Windows 凭据」→ 找到 github.com 相关条目删掉;Linux 用户若用了 git-credential-libsecret,可运行 git credential reject < /dev/null

小技巧:快速确认当前仓库用的哪套配置

在仓库根目录下执行:

git config --get-regexp "^user\."

它会同时列出 local(当前项目)和 global(全局)设置,local 优先级更高,一眼就能看出实际生效的是哪个。

下次 clone 新仓库前,顺手进目录 run 两行 config,就再也不会出现「提交人不是我」的尴尬了。