对于最近的提交

更改最近提交的作者信息:

git commit --amend --author="author_name <author_email> --no-edit"

author_email 必须加上<>

如果作者已经在 .git/config 中配置好,也可以直接运行:

git commit --amend --reset-author --no-edit

对于较旧的提交

如果想更改多个提交的作者信息,我们可以使用 git rebase.
例如:
假设有提交记录为 A->B->C->D->E, 想要更改提交 B 和 D 的作者。

  • 运行变基命令 git rebase -i A
  • 将打开一个 vim 窗口打,可以看到 B、C、D、E 的提交哈希列表,它们之前都有 pick
  • 将 B 和 D 之前的 pick 改成 ,
  • 保存并退出 vim 窗口 (:wq)
  • 运行 git commit --amend --author="author_name <author-email>" --no-edit(这是针对提交 B 的)
  • 运行 git rebase --continue 以继续变基
  • 运行 git commit --amend --author="author_name <author-email>" --no-edit(这次是提交 D)
  • 运行 git rebase --continue 以继续变基

变基过程结束。

对于一系列提交

如果想将作者信息从较旧的提交更改为最近的提交,有一种比之前更有效/更快的方法:

# Note that to also include the root commit, we need to add --root option
git rebase --interactive --exec "git commit --amend --reset-author --no-edit" {commit-ref}

将会打开一个 vim 窗口:

pick xxx
exec git commit --amend --reset-author --no-edit
pick xxx
exec git commit --amend --reset-author --no-edit
...

保存退出窗口(:wq)。这些提交的作者信息将自动更改。

请注意:更改提交作者信息将更改此提交的提交哈希,并且还会更改该特定提交后的提交哈希。因此,如果已将这些提交推送到远程仓库,则本地提交将与远程不同。