いまいちよくわかっていなかったけど手を動かしてgit rebaseであれこれやってみた
久々にぎじゅつてきなおはなしです。
少し前にgit rebaseについてちょろっと触れた気がしますが、今回はもう少し考えてみようと思います。
きっかけ
ちょうどmikutterアドベントカレンダーの当番も近づいてきたし、それからネタが思いついたので、作るかーと思った次第です。そこでこまごましたコミットをまとめたくなったので、手を動かしながらやってみようと思ったわけです。
やったこと
いくつかのコミットをまとめます。今回はそれだけですが、ブランチがすっきりするのでなかなか良い感じです。
まずは最新のリビジョンからいくつかさかのぼります。こう書いておくとハッシュを覚えたりコピペしたりする手間がなくて割と楽です。特定のリビジョンからさかのぼるときはHEAD~2を書き換えます。
$ git rebase -i HEAD~3
するとこんな感じでエディターが立ち上がります。
pick gp22hjsa commit1-1 pick 298Shgam commit1-2 pick pnDioav2 commit2 ・・・
下のほうに行くほど新しいリビジョンです。今回は上から2行のコミットをひとつのコミットにしてしまいます。コミットをひとつにまとめるときはpickをsquashに書き換えます。こうするとsquashに書き換えた行とその上の行のコミットがひとつにまとまります。
pick gp22hjsa commit1-1 squash 298Shgam commit1-2 pick pnDioav2 commit2 ・・・
これで保存すると、もう一度エディターが立ち上がり、今度はコミットメッセージの書き換えをお願いしてきます。
・・・ commit1-1 ・・・ commit1-2 ・・・
あとはこれを書き換えて保存するとrebase終了です。確認するとコミットがまとまっています。
おまけ
git pushに --forceというオプションをつけると強制的にpushできることに最近気づきました。
私しかコミットしていないはずのリモートリポジトリに散々rejectされたあの日の苦労はいったいなんだったんだろう…