皆さん、tigコマンドを活用していますか?
tigは、コンソール上で使えるgitブラウザです。実はずっと、ただのきれいなgit logだと思っていたのですが、本当はそんなことはありません。かなり使えるやつなのです。
インストール
ソースコード: https://github.com/jonas/tig
インストール方法: https://github.com/jonas/tig/blob/master/INSTALL.adoc
この辺りを参考にしてみてください。詳細は割愛します。
基本の使い方
この状態の差分を扱っていきます。いつものこれだとこんな感じ。
$ git status
$ tig
git logが素敵にビジュアライズされてます。この画面をmain viewといいます。
ここでエンターを押すと、下半分に差分の詳細(diff view)が表示されます。
下矢印で、Unstaged changesの差分を見てみるとこんな感じです。git statusで Changes not staged for commitに表示されている部分の差分ですね。
ちなみに、この画面でCtrl+u、Ctrl+d、j、kで上下移動できます。vimと同じですね。
また、main viewにてdを押すと、コミット毎の差分の詳細(diff view)が全画面で表示されます。画面分割では見辛い場合にはこちらをどうぞ。
tigでaddする
ファイルごと u
main viewにて、S(shift+s)を押すと、次のように、git statusの結果が表示されます。
この画面でも、エンターを押すとそのファイルの差分を閲覧できます。
MusicLife/DetailViewController.mが、Changed but not updated:からChanges to be committed:に移動しました。
これで、git add MusicLife/DetailViewController.m完了です! 超お手軽。
Changes to be committed:に表示されているファイル名の上でuを押すと、indexから外すこともできます。
一部だけ u
さて、先ほどaddしたファイルの差分を見てみたら、まだcommitしたくない差分も混じっていました。
ここだけaddしなかったことにしたい…だけどそのためにファイルを修正するのは面倒です。
そんなときは、下の画像のように、「ここからここまで」の間の行( どの行でもOKです。 自分で範囲選択する必要はありません)を選択して、uを押すと、その範囲だけadd/unstageすることができます。

その後の様子。部分的にaddされているため、同じファイルが上段と中段の両方に表示されています。
1行だけ 1
さっきの状態に戻って、今度は1行だけadd/unstageしてみようと思います。下の画像のように操作したい行を選択して、1を押します。
すると……
1行だけunstageされました。画面上部のChanged but not updated:にもファイル名が表示されています。
このように、tigを使うことによって、細かなコミット管理が簡単に行えるようになります!
tigでcommitする C
status viewの画面で、C(shift+c)を押します。
いつものgit commitの画面ですね! いつも通り、1行目にコミットメッセージを書いて:wqすればokです。
なお、そこからmain viewに戻ってきても今作ったコミットは表示されていないと思うのですが、R(shift+r)かF5して更新すれば表示されます。
tigでpushする
addとcommitが出来るならpushも、と思って調べてみたのですが、今のところ出来ません。
いいキーバインドがないこと、誤ってリモートリポジトリに修正を加えてしまうことへの不安などが、現在実装されていない理由のようですね。上記Issueで作者の方が書いている方法で、tig上でpushを行うこともできるようですので、tig上で全て完結させたい方は試してみてください。
tigでbranch一覧を見る
main viewでH(shift+h)を押すと、branchの一覧が表示されます。いちばん上が現在のブランチ、中央の青字がローカルブランチ、下のオレンジ色がリモートブランチです。右はそれぞれのブランチの最後のコミットメッセージです。
他にも色々できる!
main viewにてhを押すとヘルプ画面になります。上に挙げた以外にも色々なことができるので、ぜひ試してみてください。
[-] status bindings
External commands:
'C' `git commit`
[-] branch bindings
External commands:
'C' `git checkout %(branch)`
[-] main bindings
External commands:
'C' `git cherry-pick %(commit)`
[-] generic bindings
View switching
'm' view-main Show main view
'd' view-diff Show diff view
'l' view-log Show log view
't' view-tree Show tree view
'f' view-blob Show blob view
'B' view-blame Show blame view
'H' view-branch Show branch view
'h' view-help Show help view
'p' view-pager Show pager view
'S' view-status Show status view
'c' view-stage Show stage view
(以下略)











