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

2023-08-23 18:35:53 浏览数 (1)

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

查询都有什么:

代码语言:javascript复制
git log --format='%aN �' | sort -u

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

  • OLD_EMAIL 原来的邮箱
  • CORRECT_NAME 更正的名字
  • CORRECT_EMAIL 更正的邮箱
代码语言:javascript复制
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 历史所有要使用强制推送:

代码语言:javascript复制
git push --f --tags

GitLab 有 master 分支保护的策略:

代码语言:javascript复制
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

  • Git 批量修改历史 commit 中的 user.name 和 user.email | segmentfault

– EOF –

  • # git

0 人点赞