对于最近的提交
更改最近提交的作者信息:
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
)。这些提交的作者信息将自动更改。
请注意:更改提交作者信息将更改此提交的提交哈希,并且还会更改该特定提交后的提交哈希。因此,如果已将这些提交推送到远程仓库,则本地提交将与远程不同。