git批量修改已提交的用户名和邮箱

为改变已经提交的 commit 的用户名和/或邮箱地址,你必须重写你 Git repo 的整个历史。执行这段脚本会重写 repo 所有协作者的历史。

完成以下操作后,任何 fork 或 clone 的人必须获取重写后的历史并把所有本地修改 rebase 入重写后的历史中,请谨慎操作。

OLD_EMAILNEW_NAMENEW_EMAIL改成你自己的

reset.sh
#!/bin/sh

git filter-branch -f --env-filter '

OLD_EMAIL="oldname@outlook.com"
NEW_NAME="oldname"
NEW_EMAIL="newname@outlook.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$NEW_NAME"
export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$NEW_NAME"
export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

执行

sh reset.sh

推送到远程仓库

git push --force --tags origin ‘refs/heads/*’