coiledcoilの日記 このページをアンテナに追加 RSSフィード

2010-08-16

Gitでコミットログを変更する

Gitを使っていて、後からコミットログを変更する方法を説明する。

まず、こんな履歴があるとする。

commit 37bde0bc18e4e3ac0bf170c045cec34662b7aad4
Author: coiledcoil <coiledcoil@localhost>
Date:   Mon Aug 16 02:08:11 2010 +0900

    message3

commit 85c337ad4de254bc92c73b5c1504013ee36baa3f
Author: coiledcoil <coiledcoil@localhost>
Date:   Mon Aug 16 02:08:10 2010 +0900

    message2

commit 664835c29bf5689d673b4f4349f2eaa3cfc85b23
Author: coiledcoil <coiledcoil@localhost>
Date:   Mon Aug 16 02:08:08 2010 +0900

    message1

commit 4a053f596455e8009d10cec686c1fc29f96b82c1
Author: coiledcoil <coiledcoil@localhost>
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である。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/coiledcoil/20100816/1281928261
Connection: close