初めてコミットを分割してみた

1つのコミットがでかくなりすぎて困っていたので、コミットを分割する術を学びました。 そもそも細かくコミットしろという話なのですが、それはひとまず置いておきます。


test1.txttest2.txtの作成を1つのコミットで行ってしまったので、2つに分けたいという場合について書いていきます。
全体の流れは以下の通りです。
1. 分割したいコミットの一つ前のコミットの状態に戻る。
2. test1.txtの作成だけコミットする。
3. test2.txtの作成だけコミットする。
4. 元の作業していた状態に戻る。

手順

1. 分割したいコミットの1つ前のコミットの状態に戻る。

  • git rebase -i {分割したいコミットID}~の実行
    • ~は1つ前と言う意味です。
    • コミットIDはgit loggit log --onelineで確認できます。
      下の画像の黄色い文字列の部分です。
      f:id:komaji504:20150913024542p:plain

下の画像のようにテキストエディタが立ち上がるので、変更したいコミットの左端に書いてあるpickeditに変更して保存、終了します。
f:id:komaji504:20150913024746p:plain

すると、下の画像のように説明が表示され、editに変更したコミットをした直後の状態に移動します。
f:id:komaji504:20150913025423p:plain

  • git reset HEAD^の実行

これにより、test1.txttest2.txtが作成されただけでコミットもaddもされていない状態になります。

2. test1.txtの作成だけコミットする。

test1.txtをaddしてコミットするだけです。

git add test1.txt
git commit -m "test1.txtを追加"

3. test2.txtの作成だけコミットする。

test1.txtのときと同様にコミットします。

4. 元の作業していた状態に戻る

  • git rebase --continueを実行する。

以下のように表示されればおっけーです。 f:id:komaji504:20150913031337p:plain

git loggit log --onelineで確認するとコミットが書き換わっていることがわかります。 f:id:komaji504:20150913031645p:plain




途中で作業を誤ってしまったり、よく分からなくなってしまった場合には、
git rebase --abortを実行することで手順を踏む前の状態に戻ります。