批量修改 Git 已经提交记录中的作者和提交人 信息

首先切换到仓库的目录, 然后执行下面的语句:

git filter-branch --env-filter '

OLD_EMAIL="**********" // 要替换的邮箱
CORRECT_NAME="**********" // 新的用户名
CORRECT_EMAIL="**********" // 新的邮箱

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
' 

执行时会弹出以下警告:(直接忽略, 等待脚本执行)

WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as ‘git filter-repo’
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
Proceeding with filter-branch…

不用理会, 等几秒钟后会接着执行. 最终看到的结果形式如下:

Rewrite 380ed76b2376c0a75ce49d7ed9608a775e96635c (11/11) (0 seconds passed, remaining 0 predicted)
Ref ‘refs/heads/develop’ was rewritten

git log 查看

但是当你再次执行脚本,想修改其他提交的姓名时会发现git抛出了异常,

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
出现这一句说明之前曾经执行过 git filter-branch,然后在 refs/original/ 有一个备份,这个时候只要删掉那个备份即可,删除备份命令为 git update-ref -d refs/original/refs/heads/master,或执行 $ git filter-branch -f --tree-filter -f 'rm -f test' -- --all
删掉那个备份后, 重新跑脚本就行

你可能感兴趣的:(批量修改 Git 已经提交记录中的作者和提交人 信息)