ユーザー名を間違えてGitHubにpushしてしまった時の対処法

別ユーザでgithubにpushしたコミットログを書き換える方法です。

一括変換

$ git filter-branch -f --env-filter \
    "GIT_AUTHOR_NAME='<変更後の名前>'; \
     GIT_AUTHOR_EMAIL='<変更後のメールアドレス>'; \
     GIT_COMMITTER_NAME='<変更後の名前>'; \
     GIT_COMMITTER_EMAIL='<変更後のメールアドレス>';" \
    <対象コミット>

<対象コミット>は全部もしくは範囲指定できます。
・HEAD → 全部
・HEAD~3..HEAD → 過去直近3コミット分

Author名指定

特定のAuthor名のコミットのみの変更も以下でできます。

$ git filter-branch --commit-filter '
    if [ "$GIT_COMMITTER_NAME" = "<変更前の名前>" ]; then
        GIT_AUTHOR_NAME="<変更後の名前>";
        GIT_AUTHOR_EMAIL="<変更後のメールアドレス>";
        GIT_COMMITTER_NAME="<変更後の名前>";
        GIT_COMMITTER_EMAIL="<変更後のメールアドレス>";
        git commit-tree "$@";
    else
        git commit-tree "$@";
    fi' <対象コミット>

GitHubに反映

上のコマンドで変更したら、以下のコマンドでGitHubに反映させます。

$ git push -f xxx yyy