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

如何修改Git中多个提交记录的作者信息与邮箱?

修改指定提交记录的作者信息

我曾需要修改Git仓库中特定作者的提交记录,搜索后发现常见方案是用git filter-branch和git filter-repo,但这两个工具都有明显局限:

  • git filter-branch:速度极慢,还会修改多分支中的同一提交,不符合需求,实用性差。
  • git filter-repo:功能虽好,但Ubuntu 20.04 LTS不支持,需要升级系统才能使用,兼容性受限。

我的解决方案

initialCommit=$(git log original-branch --format=format:"%h" | tail -1)
readarray -t commitsArray < <(git log original-branch --author="Original Author <originalauthor@email.com>" --format=format:"%h")
startCommitIndex=$(("${#commitsArray[@]}"-1))

git checkout -b new-branch "$initialCommit"
if [[ "$initialCommit" == "${commitsArray[$startCommitIndex]}" ]]; then
    git commit --amend --author "New Author <newauthor@email.com>"
    startCommitIndex=$(($startCommitIndex - 1))
fi
for (( commitIndex=$startCommitIndex; commitIndex >= 0; commitIndex-- )); do
    git cherry-pick "${commitsArray[$commitIndex]}"
    git commit --amend --author "New Author <newauthor@email.com>"
done

方案原理说明

核心命令基础

  • git commit --amend --author "New Author <newauthor@email.com>":专门用来修改当前HEAD指向的最新提交记录的作者信息。
  • git log的哈希格式选项:
    • --format=format:"%H":获取提交的完整40字符哈希值
    • --format=format:"%h":获取提交的短哈希值(长度在7-9字符之间,根据仓库提交历史数量自动调整),Git可以通过短哈希唯一识别对应提交。

脚本步骤拆解

  1. 获取原分支最早的初始提交哈希值,作为新分支的起点
  2. 筛选出目标作者的所有提交哈希,并存入数组中
  3. 创建新分支并直接切换到初始提交节点
  4. 检查初始提交是否属于目标作者,若是则直接修改其作者信息
  5. 反向遍历目标提交数组,通过git cherry-pick将每个提交内容合并到新分支,随后立即修改该新生成提交的作者信息

后续收尾操作

修改完成后,可执行以下命令替换原分支:

git branch -D original-branch
git branch -m new-branch original-branch

确认所有修改无误后,即可推送到GitHub、GitLab等远程仓库完成操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:05:29