Git コミットをまとめる(rebase -i)
タイトルどおり
git rebase -i HEAD~○ ※○はHEADから数えていくつのコミットをrebase対象にするかを指定する
git rebase -i 795bafe ※HEADから指定したIDまでを対象とする
今回使用するコマンドは squashとfixup
※なんの痕跡もなしにまとめてしまうfixupを使ってはいけない。
※squashは同じ箇所を修正したコミットをまとめてもコンフリクトしない(別ブランチにしてマージするとコンフリクトするケース)
【squash】
○コミットの間にまとめたくないコミットがあった場合(AAAとBBBをまとめたい)
************************
* 114b48f (HEAD, master) 2015-02-22 rebase_user@com BBB
* 6dff801 2015-02-22 rebase_user@com CCC
* 1516414 2015-02-22 rebase_user@com AAA
* 795bafe 2015-02-21 rebase_user@com DEVE & LOP_
* 1f2e82c 2015-02-21 rebase_user@com MASTER
* 07ad098 2015-02-21 rebase_user@com 初回commit
************************
この状態から
rebase -i HEAD~3
***********************
pick 1516414 AAA
pick 6dff801 CCC
pick 114b48f BBB
***********************
↓
***********************
pick 1516414 AAA
squash 114b48f BBB
pick 6dff801 CCC
***********************
↓ 並び順を変更し、まとめたいコミット(上からまとまる)のステータスをsquashにする
***********************
* bc46cab (HEAD, master) 2015-02-22 rebase_user@com CCC
* eba7a89 2015-02-22 rebase_user@com AAABBB
* 795bafe 2015-02-21 rebase_user@com DEVE & LOP_
* 1f2e82c 2015-02-21 rebase_user@com MASTER
* 07ad098 2015-02-21 rebase_user@com 初回commit
***********************
【fixup】
上の状態から引き続きfixupを試してみる。
rebase -i HEAD~2
***********************
pick bc46cab CCC
fixup eba7a89 AAABBB
***********************
↓
***********************
* 9e751ab (HEAD, master) 2015-02-22 rebase_user@com AAABBB
* 795bafe 2015-02-21 rebase_user@com DEVE & LOP_
* 1f2e82c 2015-02-21 rebase_user@com MASTER
* 07ad098 2015-02-21 rebase_user@com 初回commit
***********************
↓ファイルの状態。CCCのコミットは消えるように取り込まれていました。恐ろしい。
***********************
MASTER_GIT
CCC
REBASE_TEST
DEVELOP_XXX_BBB
AAA
***********************