您需要使用 filter-branch 命令。
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD `
git filter-branch -f --env-filter '
GIT_AUTHOR_NAME="Newname"
GIT_AUTHOR_EMAIL="newemail"
GIT_COMMITTER_NAME="Newname"
GIT_COMMITTER_EMAIL="newemail"
' HEAD
git commit --amend --author="John Doe <someone@example.com>"
或者使用交互式变基来编辑多个提交。执行命令git rebase -i HEAD~5,然后标记所有需要编辑的提交,并按照上面单一提交示例中的方式重新提交它们,并附上正确的作者字段。
无论如何,你也可以使用filter-branch
一次性更改多个提交的电子邮件地址。你需要小心地只更改属于你自己的电子邮件地址,因此你要使用--commit-filter
:
$ git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ];
then
GIT_AUTHOR_NAME="Scott Chacon";
GIT_AUTHOR_EMAIL="schacon@example.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD