如何修改Git中满足指定判断条件的特定提交的作者信息
Git 修改满足指定条件的历史提交作者方案
方法1:使用 git filter-repo(适合提交数量多的场景)
git filter-repo 是 Git 官方推荐替代废弃的 git filter-branch 的历史改写工具,支持通过自定义回调逻辑仅修改符合条件的提交:
- 新建回调脚本
modify-author.py,内容如下:
if b'My Commit Message' in commit.message: commit.author_name = b'New Name' commit.author_email = b'name@email.com' # 如果需要同时修改提交者信息,加上下面两行 commit.committer_name = b'New Name' commit.committer_email = b'name@email.com'
把其中的提交信息匹配关键字、新作者名和邮箱替换为你的实际值。
2. 执行改写命令:
git filter-repo --commit-callback "$(cat modify-author.py)"
方法2:使用交互式 rebase(适合提交数量少的场景)
如果需要修改的提交数量不多,可以用交互式 rebase 逐个修改:
- 先执行你原来的筛选命令,拿到所有需要修改的提交哈希:
git log --pretty=format:'%H %s' | grep 'My Commit Message' | awk '{print $1}'
- 找到这些提交中最早的那个哈希,取它的前一个提交作为 rebase 起点,执行交互式 rebase:
git rebase -i <最早需要修改的提交哈希>^
- 在弹出的编辑界面中,把所有需要修改的提交前面的
pick改为edit,保存退出 - 每次 rebase 停下来等待修改时,执行以下命令更新作者信息:
git commit --amend --author="New Name <name@email.com>" --no-edit git rebase --continue
重复这个过程直到所有 rebase 任务完成。
注意事项
- 两种方法都会重写修改点之后所有提交的哈希,操作前务必备份完整仓库
- 如果修改的提交已经推送到远程仓库,推送时需要加
--force参数,同时要通知所有协作的开发者同步拉取新的分支历史,避免出现冲突
内容的提问来源于stack exchange,提问作者Daniel Porteous
相关产品推荐
相关产品推荐

