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

Git批量修改全历史提交作者信息(含多分支与标签)

批量修改Git全分支及标签的作者信息方案

直接用官方推荐的git filter-repo工具(已废弃的filter-branch易出问题,不建议再用),它能可靠重写所有提交历史,自动处理分支和标签,步骤如下:

1. 先备份仓库

操作前务必备份整个仓库,避免意外:

cp -r your-repo-directory your-repo-directory-backup

2. 安装git filter-repo

确保本地已安装该工具,多数Linux发行版可通过包管理器安装(如apt install git-filter-repo),macOS可用brew install git-filter-repo,Windows可通过Git for Windows附带版本使用。

3. 重写所有提交的作者信息

方式一:精准替换指定旧信息

如果明确要替换的旧用户名和邮箱(即同事的全局配置信息),执行以下命令(替换括号内的实际值):

git filter-repo --commit-callback '
if commit.author_name == "同事的用户名" and commit.author_email == "同事的邮箱":
    commit.author_name = "你的用户名"
    commit.author_email = "你的邮箱"
    commit.committer_name = "你的用户名"
    commit.committer_email = "你的邮箱"
'

方式二:用mailmap批量替换

创建一个名为.mailmap的文件,内容格式如下(一行对应一组替换规则):

你的用户名 <你的邮箱> 同事的用户名 <同事的邮箱>

然后执行:

git filter-repo --mailmap .mailmap

两种方式都会自动重写所有分支、标签关联的提交历史,更新对应的SHA1值。

4. 验证修改结果

  • 检查提交历史:git log --oneline --author="你的用户名",确认所有提交的作者信息已更新
  • 检查标签:git show 你的标签名,查看标签指向的提交作者是否正确

5. 强制推送到远程仓库

由于历史已完全重写,必须强制推送所有分支和标签(因为是你的独立仓库,不会影响同事的仓库):

# 推送所有分支
git push origin --all --force
# 推送所有标签
git push origin --tags --force

后续预防措施

为避免再次出现全局配置覆盖本地的情况,在当前仓库单独配置用户信息:

git config user.name "你的用户名"
git config user.email "你的邮箱"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:57:37