/

Git 批量修改历史 commit 中 user.email

注意:此操作会修改 Git 历史记录,正式工作环境不允许。

查询都有什么:

git log --format='%aN %aE' | sort -u

注:一个特殊情况如果 email 没被设置过 OLD_EMAIL 可以填 user.name

  • OLD_EMAIL 原来的邮箱
  • CORRECT_NAME 更正的名字
  • CORRECT_EMAIL 更正的邮箱
git filter-branch -f --env-filter '
OLD_EMAIL="old@qq.com"
CORRECT_NAME="MyName"
CORRECT_EMAIL="new@gmail.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

因为修改了 Git 历史所有要使用强制推送:

git push --f --tags

GitLab 有 master 分支保护的策略:

remote: GitLab: You are not allowed to force push code to a protected branch on this project.

在 GitLab 中:Project(项目) -> Setting -> Repository 菜单下面的 Protected branches 把 master 的保护去掉就可以了。

References

– EOF –