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
# 問題がなければ強制Push
git 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
忘るべからず」ではありますが、間違えてしまったときはサクッと変更できるので覚えておくと良いかもしれません。