ファイル X,Y,Zを3回に分けて追加・コミットした。これらをひとつにまとめたい。
$ touch X
$ git add X
$ git commit -m "X"
$ touch Y
$ git add Y
$ git commit -m "Y"
$ touch Z
$ git add Z
$ git commit -m "Z"
ログで確認
$ git log HEAD~3..
commit 9e0944f5b0d51d67127a4256751163ba0490d154
Author: Nunocky <nunocky@example.com>
Date: Wed Apr 11 13:55:54 2018 +0900
Z
commit 5b461fe467c13b2c65e77b9346005ac6cc7f0fb3
Author: Nunocky <nunocky@example.com>
Date: Wed Apr 11 13:55:47 2018 +0900
Y
commit d01a3a6788abcf018d9ba77e6afcb391e67c0d43
Author: Nunocky <nunocky@example.com>
Date: Wed Apr 11 13:55:37 2018 +0900
X
rebaseを d01a3a6の一個前のところで -iオプションで実行、エディタを開く。
$ git rebase -i d01a3a6^
先頭3行を以下のように書き換え。 squashは「前のコミットに押し込める」の意。
pick d01a3a6 X
squash 5b461fe Y
squash 9e0944f Z
エディタを終了するとコミットが始まる。自動でテキストが入っているのでとりあえずそのままにして終了。
ログで確認
$ git log
commit 3c6afc8c7fb4b03b2454515c81e29412d8e75d6a
Author: Nunocky <nunocky@example.com>
Date: Wed Apr 11 13:55:37 2018 +0900
X
Y
Z
...
13:55:37に行ったコミット Xに Y,Zの追加も含まれるようになった。