こんにちは、ナナオです。

今回は私が愛用しているtigの使い方を説明していこうと思います。

tigとは

tigはターミナルなどで動作する、gitのTUIツールです。

コミットやステージング、スタッシュなどの操作をTUIで実行できるのが特徴です。

同じようなTUIツールだと、最近はlazygitなどが有名ですね。

インストール

インストールはbrewで行いました。

brew install tig

あとは任意のgitリポジトリのディレクトリでコマンドを実行します。

tig

以下のような画面になります。

この状態でsキーを押すと、ステージングファイルなどを見ることができます。

qキーを押すことで前の画面に戻れます。

カーソルの移動はvimっぽくjkキーで行えます。

また、.tigrcというファイルをホームディレクトリに配置することで、独自のキーカスタマイズも可能です。

私はこれを利用して、リポジトリへのプッシュやgit flowを行えるようにしています。

git-flowを行えるようにする.tigrc

dotfiles/tigrc.git-flow at master · darcyparker/dotfiles · GitHub

fetch / pull / pushを行う.tigrc

Tig で Git を自由自在に操作するための .tigrc 設定例 #hub - Qiita

# F で fetch (default: :toggle file-name / :toggle commit-title-refs)
bind generic F      ?git fetch %(remote)
bind main    F      ?git fetch %(remote)

# Alt-f で :toggle file-name / :toggle commit-title-refs
bind generic <Esc>f :toggle file-name
bind main    <Esc>f :toggle commit-title-refs

# U で pull
bind generic U      ?git pull %(remote)

# Alt-u で該当ブランチを更新
bind main    <Esc>u ?sh -c "git checkout %(branch) && git pull %(remote) --ff-only && git checkout -"
bind diff    <Esc>u ?sh -c "git checkout %(branch) && git pull %(remote) --ff-only && git checkout -"
bind refs    <Esc>u ?sh -c "git checkout %(branch) && git pull %(remote) --ff-only && git checkout -"

# P で remote への push
bind generic P      ?git push -u %(remote) %(repo:head)

# S で stash save
bind generic S      ?git stash save "%(prompt Enter stash comment: )"

# Bindings for git-flow.
#
# Flow bindings start with the capital F and then follow the first character of
# each operation. If executed from the refs view, the operations (that make
# sense to) work on the selected branch. Otherwise, they work on the currently
# checked out branch.
#
# Commands that finish a flow require confirmation to run. Commands that create
# a new flow prompt for user input and run when that input is accepted with no
# confirmation prompt.
#
# Note: Bindings assume the standard git-flow paths of feature, release, hotfix
# and support.
#
# To use these keybindings copy the file to your HOME directory and include it
# from your ~/.tigrc file:
#
#       $ cp contrib/git-flow.tigrc ~/.tigrc.git-flow
#       $ echo "source ~/.tigrc.git-flow" >> ~/.tigrc

# Get rid of default bindings for F, as that will be the entry point for all
# git-flow related commands with this binding.
bind main    F none
bind generic F none

# General
bind generic Fi ?git flow init

# Feature
bind generic Ffl !git flow feature
bind generic Ffs !git flow feature start "%(prompt New feature name: )"
bind generic Fff ?sh -c "git flow feature finish `echo %(repo:head) | sed -e s/feature.//`"
bind refs    Fff ?sh -c "git flow feature finish `echo %(branch) | sed -e s/feature.//`"

# Release
bind generic Frl !git flow release
bind generic Frs !git flow release start "%(prompt New release name: )"
bind generic Frf ?sh -c "git flow release finish `echo %(repo:head) | sed -e s/release.//`"
bind refs    Frf ?sh -c "git flow release finish `echo %(branch) | sed -e s/release.//`"

# Hot Fix
bind generic Fhl !git flow hotfix
bind generic Fhs !git flow hotfix start "%(prompt New hotfix name: )"
bind generic Fhf ?sh -c "git flow hotfix finish `echo %(repo:head) | sed -e s/hotfix.//`"
bind refs    Fhf ?sh -c "git flow hotfix finish `echo %(branch) | sed -e s/hotfix.//`"

# Support
bind generic Fsl !git flow support
bind refs    Fss !git flow support start "%(prompt New support name: )" %(branch)% 

まとめ

カスタマイズもしやすいtig、おすすめです。

速度を求めるならgituiもおすすめです(Rust製なので速いみたいです)