Edited at

超絶便利なGitクライアントのtigのすすめ

More than 1 year has passed since last update.

tigはテキストベースのgitクライアントです。

tig.gif

(このgifでは、tigの起動からREADMEを適当に編集してcommitするまでやっています。)

全てのgitの機能が使えるわけではないのでうが、普段のgitの操作の大半はtigを使ったほうが断然便利です!

この記事では、tigの全部を紹介はできないのですが、基本的な操作からカスタマイズするための方法を紹介します。


URL/インストール


記事を書いたときの環境


  • mac

  • tig 2.2.1


 基本操作/カーソル移動

キー
挙動

j, k
カーソルの上下移動

←,→
左右にスクロール

enter
サブビュー表示(詳細表示)。

Ctrl+D
Ctrl+U

q
現在のビューを閉じる

Q
tigを終了

/
画面内の検索。prompt(下画面)に検索する文字を入力できます

basic3.gif


ビュー一覧

キー
ビュー名
説明

m
main
デフォルトのビュー。いわゆるgit tree

s
status
git status

r
refs
branch, tag一覧

l
log
git log

t
tree
ディレクトリツリー

g
grep
git grep

b
blame
git blame

h
help
tigのキーバインド一覧


mainビュー m

image

mを押すとmainビューが表示されます。

tigの起動時にも表示されるビューです。いわゆるgit treeのビューです。

enterでそのコミットの詳細を見れたり、C(shift+c)でcherry-pickしたりできます。


statusビュー s

image

sを押すとstatsuビューが表示されます。git statusのビューです

enterでファイルの変更内容を見れたり、stage/unstage(add/reset)をしたりできます。


refsビュー r

image

rを押すとrefsビューが表示されます。brach, tagsなどが一覧されます。

enterでmainビュー(git tree)が見れたり、C(shift+c)でcheckoutしたりできます。


logビュー l

image

lを押すとlogビューが表示されます。git logです。

enterでそのコミットのdiffが見れたりします。


treeビュー t

image

tを押すとtreeビューが表示されます。ディレクトリツリーです。

enterでファイルの内容が見れたり、eでファイルを編集できたり、bでblameを見れたりします。


grepビュー g

image

gを押すとprompt(画面下の部分)に文字が入力できるようになり、grepした文字を入力されると検索結果のgrepビューが表示されます。

enterでファイルの該当行を見たりできます。


blameビュー b

image

statusビューやtreeビューなどでファイルを選択しているような状態のときにbを押すとblameビューが表示されます。

enterでその時のコミットを見れたり、,でblameを辿っていくことができます。


helpビュー h

image

hでhelpビューが表示されます。tigのキーバインドが表示されます。

キーを忘れたときはhです!


enterで開くサブビュー

(サブビューというのは勝手に名前をつけました><)

enterはカーソルが指している対象の詳細が見れます。画面が分割され一方に詳細が表示されます。


コミットでenter->diffビュー

image

mainビューやlogビューなどでコミットを指しているときにenterを押すとdiffビューがサブビューで表示されます。


statusビューでenter->stageビュー

image

statsuビューでenterを押すとstageビューが表示されます。diffビューと同様にファイルの変更内容が見れます。


ファイルでenter->blob

image

treeビューやgrepビューなどでファイルを選択しているときにenterでblobビューが表示されます。blobビューはそのファイルの内容を見ることができます。


refsビューでenter->main

image

refs(branch, tag一覧)ビューでenterを押すと、mainビュー(git tree)が表示されます。


O(shift+o)でサブビューをメインの表示に

O2.gif


qでサブビューを閉じる

開いたサブビューはqで閉じれます。


便利なコマンド

ここまではgitのコミットやブランチなどを見るためのツールとしてのtigの紹介だったのですが、

ここからはaddなどの操作をするための紹介です。


add file u

add.gif

statusビューでuでファイルのstage/unstage(add/reset)ができます。


add -p u, \(¥)

addchunk.gif

stageビューでuを押すと変更の一部(hunk/chunk)のstage/unstageができます。

(gitではhunk, tigではchunkと表記されています。)

また、\(¥)でchunkの分割ができます。


1行だけstage/unstage 1

stage.gif

stageビューで1を押すと、その行だけstage/unstageができます。


commit C(shift+c)

commit.gif

statusビューでCを押すとコミットができます。

git commitを実行したときと同じくエディターが立ち上がります。


cherry-pick C(shift+c)

cherrypick.gif

mainビューでC(shift+c)を押すとcherry-pickができます。


checkout branch C(shift+c)

checkout.gif

refs(branch, tag一覧)ビューでC(shift+c)を押すと、そのブランチ、tagにcheckoutできます。


blameを再帰的に ,

blame.gif

blameビューで,を押すと、カーソルが指しているコミットの前の時点のblameが見れます。

(この説明があっているかはちょっと怪しいです。。)


ファイルの編集 e

edit_conflict2.gif

statusやtreeビューででファイルの上にカーソルがある状態でeを押すとエディターが立ち上がります。

ちょっとしたコンフリクトの解消とかのときにお手軽で便利です。


カスタマイズ

上記で紹介したのはtigにあるコマンドの半分以下です。

まだコマンドはあるのですが、

~/.tigrcに設定を書くことがコマンドを変更・追加ができます。

また、見た目の変更などもできます。

デフォルトの設定は、僕の環境では/usr/local/etc/tigrc.default, /usr/local/etc/tigrcにあります。

ここでは基本的な設定の仕方を紹介します。詳細はマニュアルを見てください。

http://jonas.nitro.dk/tig/tigrc.5.html


set

値の設定です。

set vertical-split = false

この例ではvertical-splitfalseを設定しています。

設定できる項目の一覧はマニュアルのページに有ります。


color

色の変更をすることができます。

color default           default default normal

color cursor white green bold
color status green default
color delimiter magenta default
color "diff --" yellow default
color "@@" magenta default
color "+" green default


bind

キーバインドの変更・追加ができます。

bind <どのビューか> <キー> <実行するコマンドなど>

という書き方をします。


<どのビューか>

ここにはどのビューでそのキーバインドを有効にするか、を書きます。

どのビューでも有効にする場合は generic

特定のビューの場合はmaintree,statusなどそのビューを書きます。


<キー>

q

Q
,
<Up>
<C-P> # Ctrl+pです
<Tab>
<F5>

という指定の仕方です。


<実行するコマンドなど>

ここの指定の仕方は色々あるのですが、主な指定の仕方を紹介します。


scroll-page-downなどtigのコマンドを実行

bind generic k move-up

の場合、move-upつまりカーソルの移動になります


:toggle xxxxなど設定の変更

キーを押したときに一時的に設定の変更ができます。その変更を永続化するためにはtigrcに上記で紹介したsetコマンドを書く必要があります。

bind generic A :toggle date

の場合、dateの表示を切り替えられます。


任意のコマンドを実行

bind status C !git commitbind refs ! ?git branch -D %(branch)のような書き方です。

コマンドの先頭の文字によって挙動が変わります。



  • !xxxx


    • コマンドを実行し、そのoutputも表示されます。



      • !git commitの場合、コミット入力画面になります。






  • ?xxxx


    • コマンドを実行する前にprompt(画面下)にy/nの確認が出ます。




  • @xxxx


    • コマンドをバックグランドで実行します。outputは表示されません。


    • bind generic y @sh -c "echo %(commit) | pbcopy"としてあげれば、commitハッシュをクリップボードにコピーできます。




  • <xxxx


    • コマンド実行後にtigを終了するみたいです。使ったことないのでよくわかりません><




変数の参照

コマンドの部分に%(xxxx)と書くと変数が参照できます。

bind main C ?git cherry-pick %(commit)

の場合、カーソルが指している位置のコミットハッシュが%(commit)の部分に貼ります。

変数の一覧はマニュアルを見てください。

よく使うだろうものとしては、

変数
内容

%(commit)
commitハッシュ

%(branch)
ブランチ名

%(file)
ファイル名

%(tag)
tag名

%(head)
HEADのcommitハッシュ

%(remote)
remoteのブランチ名

%(prompt)

%(prompt Enter new branch name: )のように書きます。promptに入力した内容が入ります。


カスタマイズ例

僕の設定の一部です。

(少し古いのでもしかしたら一部動かない・間違っている者あるかもしれません。。)

(今までに出てきたgifなどはこのカスタマイズしていない状態のものです。)

# サブビューを横分割にする

set vertical-split = false

# main viewの左端にコミットIDを表示する
set main-view = id date author commit-title:graph=yes,refs=yes

# checkout -b
bind branch B ?git checkout -b "%(prompt Enter new branch name:)" %(branch)
bind main B ?git checkout -b "%(prompt Enter new branch name: )"

# 差分の前後の表示行数(diff-context)を指定
set diff-context = 4

# reset hard
bind status <Ctrl-r> ?git reset --hard HEAD

# reflogをpagerで表示
bind generic W :!git reflog

# commitハッシュをコピー
bind generic y @sh -c "echo %(commit) | pbcopy"

# push
bind main U ?git poh "%(prompt Enter push branch => )" # poh = push origin HEAD:$1

# rebase
bind main <Ctrl-r> ?git rebase -i %(commit)

# リポジトリのGitHubを表示
bind generic ^ @hub browse

# 選択したbranchのcompare画面
bind branch [ @hub compare %(branch)


終わりに

僕もtigをバリバリカスタマイズして使いこなしている側ではないのですが、この記事を読んでもらえれば十分tigは使いこなせる内容になったかと思います。

より使いこなすには、デフォルトのtigrcや(僕の環境だと/usr/local/etc/tigrc.default, /usr/local/etc/tigrcにあります。)、マニュアル(http://jonas.nitro.dk/tig/manual.html , http://jonas.nitro.dk/tig/tigrc.5.html )やネットの記事を見てください。

(ただ古い記事だとキーバインドが違っていたりすることがあるので注意してください。)