替换每个提交消息中的电子邮件地址

时间:2015-02-07 18:28:54

标签: git replace git-push git-commit commit-message

我最近注意到我不小心使用msysgit中的签名功能来签署多个提交的电子邮件地址不正确。不幸的是,我已经将提交推送到我的GitHub存储库。

有没有办法从所有提交邮件中删除(或至少替换)不正确的电子邮件地址?我宁愿不留下不正确的电子邮件痕迹。

我已经尝试替换.git目录及其子目录中每个文件中的每一个电子邮件地址,并使用git push --force --tags origin 'refs/heads/*'推送更改,但它似乎不起作用。

注意:我是GitHub存储库的所有者。它目前是一个私人项目;没有其他人在努力。

1 个答案:

答案 0 :(得分:-1)

您需要使用filter-branch

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
        then
                GIT_COMMITTER_NAME="<New Name>";
                GIT_AUTHOR_NAME="<New Name>";
                GIT_COMMITTER_EMAIL="<New Email>";
                GIT_AUTHOR_EMAIL="<New Email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD `

如果您是提交到此存储库的用户,则只需更新所有引用而无需检查旧内容

git filter-branch -f --env-filter '
    GIT_AUTHOR_NAME="Newname"
    GIT_AUTHOR_EMAIL="newemail"
    GIT_COMMITTER_NAME="Newname"
    GIT_COMMITTER_EMAIL="newemail"
  ' HEAD