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
相关产品推荐
相关产品推荐

