はじめに
push
する前に、commit
分けすぎてまとめてからpush
したいときによく使うgit rebase
を使ったsquash(スカッシュ)
について手順をまとめます。
ちなみにsquash(スカッシュ)
は「押しつぶす」とか「ぺちゃんこにする」という意味だそうです。
スカッシュの手順
現状このようなコミットがあったとします。
今回は[add]fuga
、[add]hoge
、[add]foobar
のコミットをまとめます。
user1@user1noMacBook-Pro rabase-test % git log --oneline -5
04183ba (HEAD -> develop) [add]fuga
c55e5e9 [add]hoge
1e57b68 [add]foobar
af7104c Third
e0b30cc Second
git rebase -i
コマンドを実行するとvim
に切り替わり、下記のような画面をインタラクティブモードで開けるようになります。
コミットが古い順で表示されています。
まとめるには、まとめたいコミットの1番古いコミット以外をpick
からi
に変更します。
今回では、[add]foobar
がまとめたい中で1番古いコミットなので、それ以外の[add]hoge
、[add]fuga
をpick
からs
に修正します。
修正前
% git rebase -i HEAD~5
pick e0b30cc Second
pick af7104c Third
pick 1e57b68 [add]foobar
pick c55e5e9 [add]hoge
pick 04183ba [add]fuga
# 省略
修正後
pick e0b30cc Second
pick af7104c Third
pick 1e57b68 [add]foobar
s c55e5e9 [add]hoge
s 04183ba [add]fuga
# 省略
保存するとコミットメッセージの画面に切り替わります。
ここではまとめた、3つのコミットメッセージが表示されています。
このままでも保存できますが、まとめたという内容のコミットメッセージで保存すると、新たなハッシュ値で新しいコミットが作られます。
修正前
# This is a combination of 3 commits.
# This is the 1st commit message:
[add]foobar
# This is the commit message #2:
[add]hoge
# This is the commit message #3:
[add]fuga
# 省略
修正後
# This is a combination of 3 commits.
# This is the 1st commit message:
[add]foobar+hoge+fuga
# This is the commit message #2:
# This is the commit message #3:
# 省略
新しいコミットメッセージで新しいコミットが作られた事が確認できます。
% git log --oneline -5
342db33 (HEAD -> develop) [add]foobar+hoge+fuga
af7104c Third
e0b30cc Second
d4fa0b5 (master) First