如何批量修改Git中特定作者旧邮箱对应的所有提交为新邮箱?
批量替换Git提交中指定作者邮箱的方法
可以通过git filter-branch命令批量修改所有符合条件的提交,无需逐个指定提交ID,具体步骤如下:
先备份仓库
修改提交历史是不可逆操作,务必先备份整个仓库:# 克隆镜像仓库作为备份 git clone --mirror 你的仓库地址 仓库备份名 # 或直接复制本地仓库文件夹执行批量替换命令
在目标仓库的根目录下运行以下命令,替换其中的旧邮箱、新邮箱及对应用户名:git filter-branch --env-filter ' OLD_EMAIL="user123@oldemail.com" CORRECT_NAME="user123" CORRECT_EMAIL="user123@newemail.com" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags这个命令会遍历所有分支和标签的提交,检查提交者(
COMMITTER)和作者(AUTHOR)的邮箱,只要匹配旧邮箱就替换为新的邮箱和用户名。--tag-name-filter cat用于保留原有标签的内容不变。验证修改结果
查看提交历史,确认邮箱已替换:git log --pretty=format:"%h %an %ae"输出中不应再出现
user123@oldemail.com。推送修改到远程仓库
由于修改了提交历史,需要强制推送覆盖远程仓库:# 推送所有分支 git push --force --all # 推送所有标签(如果有标签需要同步) git push --force --tags
注意事项
- 如果是多人协作仓库,必须提前通知所有成员:修改后他们的本地仓库会与远程历史冲突,需要重新克隆仓库,避免提交混乱。
- 若仓库包含大量提交,这个命令可能需要运行一段时间,请耐心等待。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

