批量修改 Git 已经提交记录中的作者和提交人 信息
2022-07-18 本文已影响0人
小白lf
首先切换到仓库的目录, 然后执行下面的语句:
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
删掉那个备份后, 重新跑脚本就行