重要:建议操作之前先备份
改变作者信息
为改变已经存在的 commit 的用户名和/或邮箱地址,你必须重写你 Git repo 的整个历史。
警告:这种行为对你的 repo 的历史具有破坏性。如果你的 repo 是与他人协同工作的,重写已发布的历史是一种不好的习惯。仅限紧急情况执行该操作。
使用脚本改变你 repo 的 Git 历史
我们写了一段能把 commit 作者旧的邮箱地址修改为正确用户名和邮箱的脚本。
注意:执行这段脚本会重写 repo 所有协作者的历史。完成以下操作后,任何 fork 或 clone 的人必须获取重写后的历史并把所有本地修改 rebase 入重写后的历史中。
在执行这段脚本前,你需要准备的信息:
-
欲修改的旧的邮箱地址
-
正确的用户名和邮箱地址
开始修改
- 打开终端(Mac 或 Linux 用户)或命令行(Windows 用户)。
- 创建一个你的 repo 的全新裸 clone (repo.git 替换为你的项目,下同)
git clone --bare https://github.com/user/repo.git // (repo.git 替换为你的项目,下同)
cd repo.git
- 复制粘贴脚本,并根据你的信息修改以下变量:
OLD_EMAIL
CORRECT_NAME
CORRECT_EMAIL
脚本:
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.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
- 按 Enter 执行脚本。
- 查看新 Git 历史有没有错误。
- 把正确历史 push 到 Github:(push 有困难时记得修改 DNS 或者搭×××)
git push --force --tags origin 'refs/heads/*'
7.清除临时 clone。
rm -rf repo.git