Git でユーザーを間違ってコミット→プッシュしてしまったときの対処法

私は Git 利用では個人用と仕事用の2つのユーザーを使い分けています。

このため、たまに仕事用のユーザーで個人のリポジトリにコミット→プッシュしてしまったりして、厄介です。

でも、Git にはあとからコミットしたユーザーを修正する方法が用意されています。

$ git filter-branch -f --env-filter \
    "GIT_AUTHOR_NAME='<user.name>'; \
     GIT_AUTHOR_EMAIL='<user.email>'; \
     GIT_COMMITTER_NAME='<user.name>'; \
     GIT_COMMITTER_EMAIL='<user.email>';" \
    <target commit | HEAD>
$ git push -f origin HEAD

上記のコマンドを実行すると指定したコミット、もしくは、すべてのコミットが指定したユーザー名、メールアドレスに書き換わります。

target commit にコミット ID を指定するとそのコミットが、HEAD を指定すると全コミットが対象になります。

書き換えた後はフォースプッシュしてリモートも書き換えます。

git filter-branch --commit-filter ' 
  if [ "$GIT_COMMITTER_NAME" = "<target user.email>" ];
    then
        GIT_AUTHOR_NAME="<user.name>";
        GIT_AUTHOR_EMAIL="<user.email>";
        GIT_COMMITTER_NAME="<user.name>";
        GIT_COMMITTER_EMAIL="<user.email>";
        git commit-tree "$@";
    else
        git commit-tree "$@";
    fi'  HEAD
$ git push -f origin HEAD

書き換えたい対象のユーザーを指定する場合は上記のコマンドを実行します。