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_EMAILとGIT_COMMITTER_EMAILがinfo@old.comのコミットに対しinfo@new.comで設定し直しているだけです。--tag-name-filter catはタグ付けしている場合に参照の更新を行う指定です。
実行後は変更が反映されているか確認し、問題がなければ強制Pushします。(過去改変に当たるので必ず変更内容の確認を行います)
git log --pretty=fuller
# 問題がなければ強制Pushgit push -f
ユーザー名の変更
ユーザー名の変更もGIT_AUTHOR_NAMEとGIT_COMMITTER_NAMEに対して同じ要領で実行してあげると変更可能です。
例:名前oldをnewにしたい時
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忘るべからず」ではありますが、間違えてしまったときはサクッと変更できるので覚えておくと良いかもしれません。