皆さん、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
(以下略)