git でメールアドレスやら名前やらを間違えて commit してしまったときの修正方法

  • id:naga_sawa:20110119:1295420861 git でメールアドレスやら名前やらを間違えて commit してしまったときの修正方法 - ..たれろぐ..

しかしStack Overflowで紹介されていた git-filter-branch(1) ベースの手法の方が楽だった.

対象commit範囲 (eg. HEAD~10..HEAD) を全て特定のauthor名に書き換えたいとき(ワンライナー):

git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; GIT_COMMITTER_NAME='Newname'; GIT_COMMITTER_EMAIL='newemail';" HEAD~10..HEAD

対象commit範囲のうち,元となるauthor名が特定の値のときだけ書き換えたいとき:

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
        then
                GIT_COMMITTER_NAME="<New Name>";
                GIT_AUTHOR_NAME="<New Name>";
                GIT_COMMITTER_EMAIL="<New Email>";
                GIT_AUTHOR_EMAIL="<New Email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD~10..HEAD

使える環境変数git-commit-tree(1) を見ろ,とあるね:

例えばGithubでは,commit内に登録済みのauthor名があるとリンクを付けてくれるので,author名はきちんと揃えた方が得である.うっかりローカルマシン上のアカウント名(≠Githubのアカウント名)のままcommitを続けてしまった後にこの技が役立った.