--local 配置在单个仓库生效,按仓库而非分支隔离邮箱:执行 git config --local user.email "xxx@company.com" 写入 .git/config 覆盖全局设置,所有分支提交均使用该邮箱,多项目需分别配置,不可依赖分支自动切换。

git config --local user.email 在单个仓库生效
Git 的用户邮箱不是全局绑定的,而是按作用域分层:--system(系统级)、--global(用户级)、--local(仓库级)。当你在某个分支下想用不同邮箱,本质不是“按分支配置”,而是“按仓库配置”——因为分支之间共享同一套 .git/config,无法为 main 分支设一个邮箱、dev 分支设另一个。
真正可行的做法是:在该仓库目录下执行 git config --local user.email "xxx@company.com",它会写入当前仓库的 .git/config,覆盖全局设置。后续所有在这个仓库里的提交(无论哪个分支)都会用这个邮箱。
- 执行前确保已在目标仓库根目录下(
cd /path/to/your/repo) - 运行
git config --local user.email "xxx@company.com"后,可用git config user.email验证是否生效 - 如果误配,删掉
.git/config中[user]段落即可回退
多项目多邮箱必须靠 --local 隔离
你有公司项目 A 和开源项目 B,两个仓库需要不同邮箱,就不能只靠 --global。否则每次切项目都要手动改全局配置,极易出错——比如在开源仓库里误提交了公司邮箱,历史就污染了。
- 公司项目 A 目录下执行:
git config --local user.name "Zhang San"和git config --local user.email "zhang@corp.com" - 开源项目 B 目录下执行:
git config --local user.name "walterlv"和git config --local user.email "hi@walterlv.com" -
--local设置不会影响其他仓库,也不需要每次切换都重设
别信“按分支自动切换邮箱”的脚本方案
网上有些教程推荐用 post-checkout 钩子或 shell 别名来“检测当前分支名并自动改邮箱”,这类做法实际不可靠:
CNB 云原生构建平台的 Git 操作技能,支持代码克隆、提交、推送、分支管理、Merge Request 管理、流水线触发与结果读取。初次使用需收集用户的 Git 用户名和邮箱。
- 钩子只在
git checkout或git switch时触发,但提交可能发生在任意时刻,中间若手动改过.git/config就会失效 - 分支名不是邮箱归属依据——
feature/login可能属于公司项目,也可能属于个人实验,逻辑上无法自动判断 - 钩子修改
.git/config还可能和 IDE(如 VS Code)的 Git 插件冲突,导致邮箱显示错乱
git commit --author 是临时补救手段
如果你已经在一个错误邮箱的仓库里做了几次提交,又不想重写历史,可以用 --author 覆盖单次提交的作者信息:
git commit --author="Correct Name <correct@example.com>" -m "fix: use right email"
注意这只能用于本次提交,不改变配置;且 --author 的格式必须严格为 "Name <email>",少空格或少引号会报错 fatal: invalid author format。
真正的隔离点只有一个:每个仓库独立配 --local。分支再多,只要仓库不变,邮箱就不该变——这是 Git 设计的底层逻辑,绕不开,也不该绕。

















