新しいフォルダー

気になったことや勉強したことについて書いていきます

Git コミットをまとめる(rebase -i)

タイトルどおり

 

git rebase -i HEAD~○ ※○はHEADから数えていくつのコミットをrebase対象にするかを指定する

git rebase -i 795bafe ※HEADから指定したIDまでを対象とする

 

今回使用するコマンドは squashfixup

 

※なんの痕跡もなしにまとめてしまう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

***********************