ユーザを間違えたまま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' <対象コミット>

シングルクォートやダブルクォート、[ ]の前後に空白入れ忘れたりするとエラーになります。

リモートに反映

git logで確認し、大丈夫そうならリモートに反映しましょう。


git push -f xxxxx yyyyyをするとリモート先でも書き換わります。