之前我在 git config
中都会将 Email 地址设置成我当前使用的电脑的名字,比如我当前使用的电脑名字叫 tourcoder,所以我就会设置成 [email protected]
,命令是 git config --global user.emai [email protected]
。最近因为工作需要,我需要将 Email 设置成真实的地址,比如我这里改成了 tc@****
,除了在全局变量中做了修改,还要修改之前的历史 commit 记录中的 Email 地址。于是我执行了脚本命令
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "[email protected]" ];
then
GIT_AUTHOR_EMAIL="tc@@****";
fi
git commit-tree "$@";
' -f HEAD
命令执行,且自动更改后,执行 git log
检查得到如下结果
通常情况下,所有的历史 commit 记录的 Email 地址都更改过来了,但是有时候会遇到一个问题,我们挑选任意一个 commit 查看,比如最上面的这个,执行命令 git show --pretty=format:"%ce" 424c8b2089742b0965089b3317670c6152c2ed2c,oops
,并没有更改过来,还是 [email protected]
那是因为需要更改 GIT_COMMITTER_EMAIL
,即在上面的脚本中加入 GIT_COMMITTER_EMAIL
的内容即可。
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "[email protected]" ];
then
GIT_AUTHOR_NAME="tc"
GIT_AUTHOR_EMAIL="tc@***";
GIT_COMMITER_NAME="tc";
GIT_COMMITTER_EMAIL="tc@***";
fi
git commit-tree "$@";
' -f HEAD
执行脚本,完成。在 git 手册中有一篇关于 [git filter branch](https://git-scm.com/docs/git-filter-branch)
的文章中提到,还可以通过 --env-filter
来修改,脚本命令是
git filter-branch --env-filter '
if test "$GIT_AUTHOR_EMAIL" = "[email protected]"
then
GIT_AUTHOR_EMAIL=tc@***
GIT_COMMITTER_EMAIL=tc@***
fi
' -- --all
也能达到一样的效果,更多的用法,可以去查看上面的文章。
> 可在 Twitter/X 上评论该篇文章或在下面留言(需要有 GitHub 账号)