2018-05-27 (日)
[Git] 歴史上のCommiterとAuthorの名前とメールアドレスを変更する
git filter-branch –env-filterを使用して過去の情報を変更します。
無条件での一括変更、特定のメールアドレスを条件とした変更をする方法です。--commit-filter
は遅いようなので使用していません。
環境
- Windows 10 Pro 64bit 1709
- Git 2.17.1.windows.1
結果
全てのブランチを対象とする場合は、末尾のHEAD
を-- --all
にして以下を実行します。
無条件に一括変更する
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='newName'; GIT_AUTHOR_EMAIL='new@localhost'; GIT_COMMITTER_NAME='newName'; GIT_COMMITTER_EMAIL='new@localhost';" --tag-name-filter cat HEAD
特定条件の場合のみ変更する
ある名前(メールアドレス)の場合のみ、新しい名前(メールアドレス)に変更してみます。old@localhost
-> new@localhost
oldName
-> newName
メールアドレスで条件判定する例です。
git filter-branch -f --env-filter '
if test "$GIT_AUTHOR_EMAIL" = "old@localhost"
then
GIT_AUTHOR_EMAIL="new@localhost"
GIT_AUTHOR_NAME="newName"
fi
if test "$GIT_COMMITTER_EMAIL" = "old@localhost"
then
GIT_COMMITTER_EMAIL="new@localhost"
GIT_COMMITTER_NAME="newName"
fi' --tag-name-filter cat HEAD
個別に条件判定する例です。
git filter-branch -f --env-filter '
if test "$GIT_AUTHOR_EMAIL" = "old@localhost"
then
GIT_AUTHOR_EMAIL="new@localhost"
fi
if test "$GIT_COMMITTER_EMAIL" = "old@localhost"
then
GIT_COMMITTER_EMAIL="new@localhost"
fi
if test "$GIT_AUTHOR_NAME" = "oldName"
then
GIT_AUTHOR_NAME="newName"
fi
if test "$GIT_COMMITTER_NAME" = "oldName"
then
GIT_COMMITTER_NAME="newName"
fi' --tag-name-filter cat HEAD
確認方法
git log --pretty=full
# 確認する数を指定する (どちらでもOK)
git log --pretty=full -10
git log --pretty=full -n 10
リモートに強制プッシュ
git push -f
git push --tags -f
感謝
関連記事
新着記事