Git & Tig コミットを分割してみた
Everyday Rails 写経中・・
Read Everyday Rails - RSpecによるRailsテスト入門 | Leanpub
RSpecの勉強に、Everyday Railsを写経中。現在5章(コントローラースペックの基礎)始めたところ。 本家のgitリポジトリをクローンしないで、同じ状態になるように、Railsコマンドたたいて進めていた。
こんな感じ↓
$ ./bin/rails g model Contact firstname:string lastname:string email:string
generate controllerしようとして、一緒にviewも作りたくなって、もしかして最初にscaffoldした方が良かったかも。。と思いせっかくだからgitコマンドの練習を兼ねてやり直してみようと思った。 (モデル生成とマイグレーション適用以外の、写経部分のみをscaffoldし直したところに当てたい)
4章まで進んでくる間に、モデルを作ったトコと、スペック書いてたところをなるべくstep by stepに分けてたつもりだったんだけど、いざapplyしようとしたら、db migreateしてるのと、一緒になってたコミットがいくつかあり・・・
このコミットのうち、コレとコレとコレ(ファイル指定)でapplyしたいんだよな〜・・・
git cherrypickの時に、ファイルの指定ってできないんだろうか・・・
としばし悩んでたけど、コミットそのものを分割すれば良いことに気づいた。
やってみた
今までぼへ〜っとコミットログを見ることにしか使えてなかったtigも使ってみたい。
分割したいコミットのところでブランチチェックアウト
pokepokeは分割したいコミットを表すid。
re-applyという名前で新しいブランチをpokepokeから作る。
$ git checkout -b re-apply pokepoke
reset --softでコミットの状態をコミット前に戻す
1個前の状態に戻す。 ファイルはもちろんそのままにしたいので、--softで。
$ git reset --soft HEAD^
applyしたい部分だけステージしてコミット
ここでtig登場
$ tig
Shift-S
でステージングビューに移動。
コミットに含めたいファイルを選択し、u
でステージング。
Shitf-C
でコミット。
このページで勉強した:tigでgitをもっと便利に! addやcommitも - Qiita
分割したコミットをapplyしたいブランチに戻る
元のブランチに戻る。
$ git checkout original-branch
tigでさっきのapplyするブランチを表示
tig起動時にブランチ名を指定すると、そのブランチを操作対象にしてくれる。
$ tig re-apply
re-applyブランチのコミットログが出てくるので、さっき作った分割したコミットを選んで、Shift-C
完成!
作ったコミットまで戻って一旦分割できるようになった・・ やっとgitの良さがわかりかけてきたかも。