基于 邮件名 替换 新邮箱
和 新用户名
- 在仓库文件夹目录执行
#!/bin/sh
git filter-branch --env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
om='old mail'
nn='new name'
nm='new mail'
if [ "$GIT_COMMITTER_EMAIL" = "$om" ]
then
cn="$nn"
cm="$nm"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$om" ]
then
an="$nn"
am="$nm"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'
当重复执行失败
- 报错信息
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
这是因为执行该操作会备份, 而上一次的备份文件还在, 所以在上面的命令后面加上 -f
, 或确认无误后, 将备份文件删掉
filter-branch
keeps backups, so repository need to clean up reflogs and garbage collect. Make sure that have no need in this backups before deletion:
- 删除备份
rm -Rf .git/refs/original
git gc --aggressive --prune=now