これは何
私は開発作業をしているとき、一旦手を動かすことを優先することが多く、1つ1つのコミットの修正範囲が大きくなってしまうことが多いです。
コミットログを想像しながら開発ができればいいのですが、やはり書いてみないとわからないことも多いので、、、
そんな時に、後からでもコミットログを整理整頓しやすい tig
というツールがあります!
細かい使い方はいっぱいありますが、覚えることが多すぎると結局使わなくなってしまうので、これだけ知っておけば、コミット整理が楽になるという部分にだけフォーカスして紹介します。
tigのインストール
そこまで難しくはないと思うので、こちらを参考に行なってください。
https://github.com/jonas/tig/blob/master/INSTALL.adoc
Macであれば、Homebrewからインストールできます。
$ brew install tig
tigの基本的な見方
ターミナルで下記のコマンド tig
を入力すると main view
が開きます。
$ tig
main view
の中で、それぞれの履歴にフォーカスしてEnter
を押すことで、変更差分を見ることができます。
カーソルの移動は、左の画面では ↑
/↓
右の画面では k
/j
を使います。
画面を抜けたい時は、q
を押します。
d
を押すことで履歴画面を全画面にもできます。
tigの便利なところ
コミット整理を行う上で難しいのが、同じファイル内で複数の修正を行ない、それぞれを別のコミットにする場合です。
ファイルが別々であれば、git add ファイル名
で今から作りたいコミットに含めたいものだけstageに追加すれば良いですが、同一ファイル内だと途端に困ってしまうことないですか?
それではやっていきましょう!
status view を開く
main view
が表示されている状態で、s
を押すと git status を実行したような画面になり、まだコミットされていないファイルのリストが表示されます。
-
Changes to be committed:
- stageにのっている変更(コミット対象になる変更)
-
Changes not staged for commit:
- まだstageにのっていない修正
-
Untracked files:
- まだstageにのっていない新規ファイル追加
ファイル単位でstageに載せる
status view
を開いた状態で、 stageに載せたいファイルにカーソルを合わせて、u
を押すだけ。
これで、ファイルごとstageに登録されます。
部分ごとにstageに載せる
status view
を開いた状態で、 **Changes not staged for commit:**の中にあるファイルにカーソルを合わせて、Enter
を押します。
修正履歴が表示されるので、@@ ~ @@ の範囲内でu
を押すと、そのまとまりがstageに登録されます。
1行ごとにstageに載せる
status view
を開いた状態で、 **Changes not staged for commit:**の中にあるファイルにカーソルを合わせて、Enter
を押します。
修正履歴が表示されるので、stageに追加したい部分にカーソルを合わせて1
を押すと、その行がstageに登録されます。
※新規追加ファイルは対象外
stageから外す
status view
を開いた状態で、 Changes to be committed:: の中にあるファイルに対して、追加の手順と同様のことを行えば、ファイル単位/部分単位/行単位でstageから外すことも可能です。
最後に
基本的にはgit
だけでもなんとでもできますが、コミット整理の際には、特にtig
が直感的でわかりやすいので、私はコミット整理の際にだけtig
の力を借りています。
本記事では特にtig
の便利な使い方だけにフォーカスして、なるべく覚えることが少なくなるように意識したので、多くの方に使っていただけると嬉しいです。
また、コミット整理系の記事に関して、git commit --fixup が便利 も書いているので、ぜひご覧ください。