Gitで自分のcommitの名前・メールアドレスのみを一括で変更する方法。割とよく使うのでメモ。


想定シナリオ

  • 複数アカウントを使い分けていて誤ったアカウントでcommitしてしまったり、公開したくないメールアドレスでcommitしてしまったとき、履歴をまとめて改変したい。
  • 複数人でcommitしているので自分のcommitに限って変更したい。

解決方法

事前に設定したメアド(OLD_EMAIL)に合致するcommitの下記情報を書き換える。

  • Author Name
  • Committer Name
  • Author Email
  • Commiter Email

(参考)authorとcommitterのちがい

  • author: オリジナルのコードを書いた人
  • committer: 最後にそのcommitに変更を加えた人

git logしたときに出てくる名前は前者のAuthor Name

実行するコマンド

git filter-branch -f --env-filter '
OLD_EMAIL="{変更したいメアド}"
NEW_NAME="{変更後の名前}"
NEW_EMAIL="{変更後のメアド}"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$NEW_NAME"
    export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$NEW_NAME"
    export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
'

おわりに

リモートにpush済みのcommitに変更を加えた場合、当然ながらforce pushが必要。

リモート反映前に行うか、force pushが必要ならチームメンバに確認をとりましょう。