如何批量修改多个提交的作者和邮箱

批量改提交作者/邮箱:推荐 git filter-repo --email-callback / --name-callback 重写全历史;老工具 git filter-branch --env-filter 可按旧邮箱条件替换。重写后需强推,协作者需重新克隆。

最佳实践
Git 提交历史与版本恢复示意

推荐 git filter-repo(filter-branch 的现代替代,快且安全):按条件把历史中的作者/提交者邮箱批量替换。典型场景:误用公司邮箱提交了一堆个人项目,或换邮箱后统一历史署名。

filter-repo 方式(推荐)

pip install git-filter-repo

# 按旧邮箱替换作者与提交者
git filter-repo --email-callback '
  return email.replace(b"old@company.com", b"new@example.com")
'

# 同时改名字
git filter-repo --name-callback '
  return name.replace(b"Old Name", b"New Name")
'

操作的是整个仓库历史,执行前建议在全新克隆上做。

只改最近 N 个提交

git rebase -i HEAD~5 --exec 'git commit --amend --author="New <new@example.com>" --no-edit'

--exec 让 rebase 每停一个提交就执行一次 amend。

推送与善后

git push --force-with-lease --all
git push --force-with-lease --tags
  • 所有协作者必须重新克隆(旧克隆里的历史已作废);
  • GitHub 上提交与账号的关联按邮箱匹配,改对了头像和贡献统计会自动恢复。

常见问题(FAQ)

Q:filter-branch 和 filter-repo 用哪个?

filter-repo。filter-branch 官方已标记为不推荐(慢、易误用),新系统默认不带。

Q:能只改某个提交范围的作者吗?

rebase --exec 方式适合最近几个;历史上分散的提交用 filter-repo 的条件回调(判断 email/日期)更可靠。

Q:改完 GitHub 上还是旧邮箱?

推送后稍等刷新;确认改的是 author 和 committer 两者(filter-repo 的 email-callback 同时处理两者)。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台