Gitでコミットログを変更する
Gitを使っていて、後からコミットログを変更する方法を説明する。
まず、こんな履歴があるとする。
commit 37bde0bc18e4e3ac0bf170c045cec34662b7aad4 Author: coiledcoilDate: Mon Aug 16 02:08:11 2010 +0900 message3 commit 85c337ad4de254bc92c73b5c1504013ee36baa3f Author: coiledcoil Date: Mon Aug 16 02:08:10 2010 +0900 message2 commit 664835c29bf5689d673b4f4349f2eaa3cfc85b23 Author: coiledcoil Date: Mon Aug 16 02:08:08 2010 +0900 message1 commit 4a053f596455e8009d10cec686c1fc29f96b82c1 Author: coiledcoil Date: Mon Aug 16 02:07:31 2010 +0900 Initial commit
直前のコミットの場合
この場合、git commit --amendを利用する。
git commit --amend
すると、エディターが起動して、既存のコミットログを変更できるようになる。
何世代か前のコミットログの場合
例として、上の履歴の「message2」を「message2 modified」に変更したいとする。
まず、変更したい履歴よりひとつ前のコミットのコミットIDを探す。
今の場合は、664835c29bf5689d673b4f4349f2eaa3cfc85b23である*1。
それから、以下のようなコマンドを実行する。
git rebase -i 664835c29bf5689d673b4f4349f2eaa3cfc85b23
すると、エディターが起動して次のようなメッセージが表示される。
pick 25787cf message2 pick d479e8f message3 # Rebase 664835c..d479e8f onto 664835c # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. #
ここからは、英語で説明がある通りである。すなわち、変更したい「message2」の手前の、
「pick」という4文字を、「reword」に変更してから、保存して、エディターを終了する。
すると、もう一度エディターが起動し、「message2」を変更するためにコミットログを
入力できる画面になる。ここで、「message2 modified」と入力すれば、コミットログは
無事に変更される。
git rebase は他にも、コミットの取り消しや、入れ替え、融合、分割など、
履歴の書き換え操作が一通りできる。
ただし、git pushしてしまった後にgit rebaseすると、何かと面倒なことになるので、
git pushする前に一度履歴を見直すようにしたほうがよいと思う。
*1:コミットIDは省略して先頭の7,8文字だけ入力してもOKである。