修改git所有commit的用户名name和邮箱email

为了 github 的打卡活动 震惊!github打卡薪资竟然可以翻倍 ;
最早写的统计程序是抓取个人面板的贡献度 html 统计提交的次数;

有些童鞋明明提交了代码;
即便爱上了野马;
也没有一点的绿;
检查后发现原因是 git 设置的邮箱和用户名跟 github 网站的不一致;
或者当我们换邮箱了;
想把已经提交过的 commit 的邮箱和用户名改成新的;

创建个测试项目 test 演示下;
初始提交是使用的用户名为:shuaibai ;
邮箱为:shuaibai@baijunyao.com ;

把用户名改为 baijunyao ;

git config user.name 'baijunyao'

把邮箱改为:baijunyao@baijunyao.com

git config user.email  'baijunyao@baijunyao.com'

随便提交个 commit ;

我们现在来把 log 中的这个 shuaibai 改成 baijunyao ;
这时候就可以用下面的脚本代码了;

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="shuaibai@baijunyao.com"
CORRECT_NAME="baijunyao"
CORRECT_EMAIL="baijunyao@baijunyao.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

在项目根目录下创建 email.sh 写入上面这段代码;

把 OLD_EMAIL 、CORRECT_NAME 、 CORRECT_EMAIL 改成自己的新旧邮箱用户名即可;
赋予执行权限;

chmod +x email.sh

linux 和 mac 命令行下运行 windows 在 git bash 下运行 sh ;

./email.sh


如果 commit 比较多的话执行的时间会比较长;
再查看 git log 可以看到已经修改成功;

如果没有效果就多执行几次;
再不行添加新的commit 再执行;
如果遇到如下错误 :

Cannot create a new backup. A previous backup already exists in refs/original/ Force overwriting the backup with -f

则执行如下命令;

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

再运行 ./email.sh 脚本 ;
这时候虽然本地改成功了;
但是 github 或者 gitee 平台上还需要覆盖下;

git push origin --force --all
git push origin --force --tags

白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共3条评论
白俊遥博客

愤青也任性白俊遥博客

2018-05-22 16:28:28 回复

白俊遥博客

znlccy:不错

2018-05-16 09:55:18 回复

白俊遥博客

独自等待:大幅度反弹的

2018-05-12 08:52:04 回复