在极少的情况下我们修改了自己在 GitHub/GitLab 等代码托管平台的用户名以后,也会想要把以前提交过代码的仓库里的提交人信息也一起修改,否则在查看提交信息的时候会出现两个不同的用户名,这样就很不美观了。虽然这种情况很少见,但是不代表不会有这种需求,所以这里就记录一下如何达到这种效果。
1git filter-branch --env-filter '2OLD_EMAIL="your-old-email@example.com"3CORRECT_NAME="Your Correct Name"4CORRECT_EMAIL="your-correct-email@example.com"5if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]6then7 export GIT_COMMITTER_NAME="$CORRECT_NAME"8 export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"9fi10if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]5 collapsed lines
11then12 export GIT_AUTHOR_NAME="$CORRECT_NAME"13 export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"14fi15' --tag-name-filter cat -- --branches --tags
在上述的 shell 语句中声明了两个变量,OLD_EMAIL
为旧的邮箱地址,CORRECT_NAME
为正确的用户名,CORRECT_EMAIL
为正确的邮箱地址,然后在 if
语句中判断当前的提交人邮箱是否为旧的邮箱地址,如果是的话就把提交人的用户名和邮箱地址修改为正确的用户名和邮箱地址,这样就可以达到修改提交人信息的目的了。在修改完成以后强制推送一下覆盖远程的信息即可。
1git push --force