指定したCommitのAuthorとCommitterを書き換える
Gitのコミットログから、特定のCommitを書き換えたいという場合の備忘録。
コミットの履歴を改変する危険な操作なので、よく分からない人は使わないこと。
目的
Gitのコミットログに含まれている名前やメールアドレスを書き換えたくなる場合がある。
具体的にありそうなのは以下のようなケース。
- アカウントを間違えてcommitしてしまった
- GitHubに登録しているメールアドレスを変更したけど、過去のコミットログに含まれているアドレスを変えたい
- コミットのログに公開したくない名前やメールアドレスが含まれているため、書き換えたい
なお、通常GitのコミットログにはAuthorが表示されるが、Committerも記録されている。1
したがって、書き換える際にはこれらを双方とも書き換える必要がある。
方法
git filter-branch
を使用する。
以下のように実行することで、<commit_id>
のコミットのみを対象に、名前やメールアドレスを書き換えることができる。
git filter-branch --env-filter '
if [ $GIT_COMMIT = "<commit_id>" ]
then
export GIT_AUTHOR_NAME="hoge"
export GIT_AUTHOR_EMAIL="fuga@example.com"
export GIT_COMMITTER_NAME="hoge"
export GIT_COMMITTER_EMAIL="fuga@example.com"
fi'
なお、シングルクォートの中身はシェルスクリプトになっている。
もしすべてのコミットを対象に書き換える場合は、if文を書かずにexport〜の箇所だけを羅列すればよい。
また、2回以上filter-branchを実行する場合は、forceオプション-f
をつけて実行する必要があるので注意。
補足
AuthorやCommitterは以下のコマンドで確認できる。
git log --pretty=full
既にリポジトリに存在する内容を書き換えた場合は、push時にfoceオプションを指定して以下のように実行する必要がある。
これは危険を伴うため、よく分からない場合は絶対に使わないこと。
git push -f
参考
-
Committerは
git log --pretty=full
で表示可能 ↩︎