如何将Git仓库迁移至新GitHub账户并替换旧提交作者信息?
解决GitHub仓库迁移并替换提交作者信息的方法
一、克隆旧仓库的完整历史版本
先把旧仓库的裸库克隆到本地,确保能获取所有提交记录:
git clone --bare https://github.com/旧账户名/仓库名.git cd 仓库名.git
二、批量替换提交作者信息
创建一个名为replace-author.sh的脚本,把旧账户的身份信息替换成新账户的:
#!/bin/sh git filter-repo --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 ' --force
提示:如果本地没装
git-filter-repo,用包管理器安装即可(比如Mac用brew install git-filter-repo,Linux用对应发行版的包管理命令)
给脚本加执行权限并运行:
chmod +x replace-author.sh ./replace-author.sh
三、推送到新账户的仓库
先在新GitHub账户下创建空仓库(不要初始化README或.gitignore),然后把修改后的仓库推过去:
git push --force https://github.com/新账户名/仓库名.git
四、清理本地临时文件
完成推送后,删掉本地的裸库文件夹即可:
cd .. rm -rf 仓库名.git
注意事项
- 这个操作会重写所有提交历史,要是仓库有其他协作者,得通知他们重新克隆新仓库,避免后续提交冲突
- 如果旧仓库里有多个旧账户的提交,可以在脚本里添加多组邮箱判断逻辑,实现批量替换
- 操作前建议备份旧仓库,防止失误导致数据丢失
内容的提问来源于stack exchange,提问作者feor
相关产品推荐
相关产品推荐

