コフス技術ブログ

Push済みコミットのCommiterとAuthorのメールアドレスを変更する流れ

間違ったメールアドレスでコミットを行い、そのまま気づかずにPushまでしてしまった時に後からメールアドレスを変更したい時の手順です。
毎回調べては記憶から消えてしまう為、備忘録として残しておきます。

状況

  • メールアドレスを間違えてコミット(例:プライベートのアドレスでコミットしてしまった等)
  • すでにPush済み

メールアドレスの変更

間違ったメールアドレスをinfo@old.comとした場合で、info@new.comに正したい時は以下のようにします。

git filter-branch -f --env-filter '
  if test "$GIT_AUTHOR_EMAIL" = "info@old.com"
  then
    GIT_AUTHOR_EMAIL="info@new.com"
  fi
  if test "$GIT_COMMITTER_EMAIL" = "info@old.com"
  then
    GIT_COMMITTER_EMAIL="info@new.com"
  fi' --tag-name-filter cat HEAD

不可逆改変が可能なfilter-branchを使うので気軽に実行するべきではありませんが、影響範囲が限定的な環境下であれば非常に便利です。

やっている事としてはGIT_AUTHOR_EMAILGIT_COMMITTER_EMAILinfo@old.comのコミットに対しinfo@new.comで設定し直しているだけです。
--tag-name-filter catはタグ付けしている場合に参照の更新を行う指定です。

実行後は変更が反映されているか確認し、問題がなければ強制Pushします。(過去改変に当たるので必ず変更内容の確認を行います)

git log --pretty=fuller

# 問題がなければ強制Push
git push -f

ユーザー名の変更

ユーザー名の変更もGIT_AUTHOR_NAMEGIT_COMMITTER_NAMEに対して同じ要領で実行してあげると変更可能です。

例:名前oldnewにしたい時

git filter-branch -f --env-filter '
  if test "$GIT_AUTHOR_NAME" = "old"
  then
    GIT_AUTHOR_NAME="new"
  fi
  if test "$GIT_COMMITTER_NAME" = "old"
  then
    GIT_COMMITTER_NAME="new"
  fi' --tag-name-filter cat HEAD

「Push前のgit log忘るべからず」ではありますが、間違えてしまったときはサクッと変更できるので覚えておくと良いかもしれません。