Github修改username后修复git历史异常

  1. 修改 ~/.gitconfig 文件中的 user.name, user.email.

  2. 将下面的脚本文件 git-user-change.sh 放在需要修改的项目的上一层文件夹中, 脚本的源码中需要修改对应的用户名和邮箱.

  3. 在项目根目录下执行 sh ../git-user-change.sh 便开始自动化重写所有脚本能匹配到的提交信息了. 拥有条件判断的此脚本, 最大的好处便是, 不会覆盖掉团队协作项目中, 他人的提交信息.
    下面这条命令会将项目 Git 所有历史里删除对 src.zip 的记录, 整个 .git 文件夹会轻很多. git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch ./src.zip' --prune-empty --tag-name-filter cat -- --all

  4. 强制更新 git push origin --force, 如果需要授权, 在 github 上修改 SSH 公钥.

  • 下面是 git-user-change.sh 的代码, 保存后执行上面的命令, 其中 if 中的判断条件是原来的邮箱, then 中是现在的名字和邮箱.
#!/bin/sh
 
git filter-branch --env-filter '
    an="$GIT_AUTHOR_NAME"
    am="$GIT_AUTHOR_EMAIL"
    cn="$GIT_COMMITTER_NAME"
    cm="$GIT_COMMITTER_EMAIL"
    if [ "$GIT_COMMITTER_EMAIL" = "willsnowdev@gmail.com" ]
    then
        cn="shengwei.xu"
        cm="shengwei.xu@qq.com"
    fi
    if [ "$GIT_AUTHOR_EMAIL" = "willsnowdev@gmail.com" ]
    then
        an="shengwei.xu"
        am="shengwei.xu@qq.com"
    fi
 
    export GIT_AUTHOR_NAME="$an"
    export GIT_AUTHOR_EMAIL="$am"
    export GIT_COMMITTER_NAME="$cn"
    export GIT_COMMITTER_EMAIL="$cm"
'

参考文章

上一篇:Springboot拦截器创建


下一篇:Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据