You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量修改Git中特定作者旧邮箱对应的所有提交为新邮箱?

批量替换Git提交中指定作者邮箱的方法

可以通过git filter-branch命令批量修改所有符合条件的提交,无需逐个指定提交ID,具体步骤如下:

  1. 先备份仓库
    修改提交历史是不可逆操作,务必先备份整个仓库:

    # 克隆镜像仓库作为备份
    git clone --mirror 你的仓库地址 仓库备份名
    # 或直接复制本地仓库文件夹
    
  2. 执行批量替换命令
    在目标仓库的根目录下运行以下命令,替换其中的旧邮箱、新邮箱及对应用户名:

    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用于保留原有标签的内容不变。

  3. 验证修改结果
    查看提交历史,确认邮箱已替换:

    git log --pretty=format:"%h %an %ae"
    

    输出中不应再出现user123@oldemail.com。

  4. 推送修改到远程仓库
    由于修改了提交历史,需要强制推送覆盖远程仓库:

    # 推送所有分支
    git push --force --all
    # 推送所有标签(如果有标签需要同步)
    git push --force --tags
    

注意事项

  • 如果是多人协作仓库,必须提前通知所有成员:修改后他们的本地仓库会与远程历史冲突,需要重新克隆仓库,避免提交混乱。
  • 若仓库包含大量提交,这个命令可能需要运行一段时间,请耐心等待。

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:54:58