Github给出
a procedure for changing the author information (including email) of past commits
. 基本上,您可以在此脚本的适当位置输入信息:
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="user@server.local"
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
然后运行它。各种选项在手册页中进行了描述。
git help filter-branch
,如果你好奇,简而言之,
--env-filter
告诉Git您将修改与提交关联的环境变量,
--tag-name-filter cat
告诉它不要更改标记的内容,以及
--branches
和
--tags
告诉Git应用可从存储库中的所有分支和标记访问的提交更改。完成后,您可以检查历史记录并强制执行:
git push --force --tags origin 'refs/heads/*'
运行该命令将有效地删除和替换GitHub上存储库的整个历史记录。如果有人分叉或克隆了它,这会给他们带来问题,因此在这种情况下,您可能实际上希望在运行该命令之后用您的历史启动一个新的存储库,并取消对旧存储库的预测。