如何修改Git历史提交关联的邮箱地址?
修改Git历史邮箱以同步GitHub贡献图表
一、前期准备
- 克隆仓库的裸版本(避免本地工作区冲突):
git clone --bare https://github.com/你的用户名/你的仓库名.git - 进入克隆的裸仓库目录:
cd 你的仓库名.git
二、批量修改历史提交信息
创建一个bash脚本(Windows用户用Git Bash运行),把下面的旧邮箱、新邮箱、用户名替换成你自己的信息:
#!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="你的旧邮箱地址" CORRECT_NAME="你的GitHub用户名" CORRECT_EMAIL="你的GitHub绑定邮箱" 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
- 保存为
change-history-email.sh,给脚本加执行权限:chmod +x change-history-email.sh - 运行脚本:
./change-history-email.sh
三、强制覆盖远程仓库历史
脚本执行完后,把修改后的历史推送到远程:git push --force --tags origin 'refs/heads/*'
四、验证与后续注意事项
- 回到本地原仓库,拉取更新:
git fetch origin && git reset --hard origin/你的分支名 - 检查提交历史:
git log --pretty=format:"%an <%ae>",确认所有旧邮箱都已替换成新的 - 重点提醒:强制推送会彻底覆盖远程仓库的历史,如果是多人协作仓库,必须提前跟团队成员沟通,让他们重新拉取代码,避免代码冲突
- 确保新邮箱已经在GitHub账号中完成验证,不然修改后的提交不会被统计到贡献图表里
内容的提问来源于stack exchange,提问作者Muhammad Usama
相关产品推荐
相关产品推荐

