注意:此操作会修改 Git 历史记录,正式工作环境不允许。
查询都有什么:
代码语言:javascript复制git log --format='%aN �' | 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 历史所有要使用强制推送:
代码语言: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