Gitでコミットをまとめる
Gitで複数のコミットを1つにまとめるにはrebaseを使用します。rebaseコマンドの-iオプションを指定することで、複数に渡るコミットを1つのコミットとしてまとめることができます。ちなみにオプションの-iは--interactiveと同意です。
書式
使用例
以下のようなコミット履歴があったとします。
上記の3つのコミットを1つにまとめる場合は以下のコマンドを入力します。
するとテキストエディタが開きます。
$ git rebase -i[--interactive] HEAD~~
rebase -i 以降にまとめるコミットを指定します。一般的にはHEADを使用し、最新コミットから数えて何番目までのコミットをまとめるか指定します。使用例
以下のようなコミット履歴があったとします。
$ git log commit 65535f1703e3e22142aba7f86c5db95e6904e41c Author: nishizaki <nishizaki.com> Date: Tue Mar 18 18:31:16 2014 +0900 コミット3回目 commit 2ed1bc4e69d0d981788930149852eecdadd35397 Author: nishizaki <nishizaki.com> Date: Tue Mar 18 18:31:03 2014 +0900 コミット2回目 commit 0d06bd425f662bef9e13585f5de1dc58cf87fea8 Author: nishizaki <nishizaki.com> Date: Tue Mar 18 18:03:29 2014 +0900 コミット
上記の3つのコミットを1つにまとめる場合は以下のコマンドを入力します。
$ git rebase -i HEAD~2
するとテキストエディタが開きます。
pick b3e712e コミット pick a3fd259 コミット2回目 pick 287611c コミット3回目 # Rebase 524ead8..287611c onto 524ead8 # # 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 # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
開いたエディタから以下のようにコミット履歴の2行目と3行目のpickをfixupに変更して保存します。
pick b3e712e コミット fixup a3fd259 コミット2回目 fixup 287611c コミット3回目 # Rebase 524ead8..287611c onto 524ead8 # # 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 # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
編集後保存終了すると再度エディタが開かれますが、統合したメッセージが表示されるだけなので再度保存して終了します。
すると元の画面に戻り、以下のようなメッセージが表示されれば成功です。
$ git rebase -i HEAD~2 [detached HEAD b000001] Add a neat feature X into the library 3 files changed, 3 insertions(+), 0 deletions(-) Successfully rebased and updated refs/heads/topic-x.
$ git log commit 0d06bd425f662bef9e13585f5de1dc58cf87fea8 Author: nishizaki <nishizaki.com> Date: Tue Mar 18 18:03:29 2014 +0900 コミット
2つのコミットが消え、統合されていることが分かります。
以上で複数のコミットを1つにまとめることができました。
0 件のコメント:
コメントを投稿