Tig
Tig は、ncursesベースのテキストモードインターフェースであり、主に Git リポジトリブラウザとして機能します。
使用時
- ターミナルベースの Git 履歴ナビゲーション:ヘッドレスサーバー環境で、コミットグラフ、ブランチ、タグを迅速にブラウズします。
- インタラクティブなステージングとチャンクコミット:ターミナルから離れずに、差分をレビューし、ハンクをステージングし、ステージングされていない行を元に戻します。
- Blame とコード注釈:コードの各行について、コミット作成者、タイムスタンプ、コミットログを調査します(
tig blame)。 - 低オーバーヘッドの Git 監査:SSH接続を介して大規模なエンタープライズ Git リポジトリを、GUIの遅延なしに監査します。
クイックスタート
1. 一般的な呼び出し方
# メインブランチのコミットグラフを開く
tig
# 特定のファイルの履歴を表示
tig path/to/file.ts
# コミットされていない変更の差分を表示(ステータスビュー)
tig status
# インタラクティブな blame ビュー
tig blame path/to/file.ts
2. 基本ナビゲーションキー
m:メインビュー(コミットグラフ)に切り替えs:ステータスビュー(ステージング)に切り替えd:選択したコミットの差分を表示b:Blame ビューu:選択したファイルまたは差分ハンクをステージ/アンステージq:アクティブビューを閉じる / 終了
コアコンセプト
本番用 Tig 設定 (~/.tigrc)
色、キーバインド、ビューレイアウトのカスタマイズ:
# ~/.tigrc
# 一般設定
set line-graphics = utf-8
set tab-size = 2
set main-view = id date:relative author:email-user commit-title:graph=yes,refs=yes
set diff-view = line-number:yes,interval=5
set status-view = line-number:yes
# キーバインド:Vimナビゲーション
bind generic j move-down
bind generic k move-up
bind generic g move-first-line
bind generic G move-last-line
bind generic <Ctrl-f> page-down
bind generic <Ctrl-b> page-up
# クイックアクション
bind main <Enter> view-diff
bind status u stage-update
bind status s stage-update
bind status c !git commit -v
インタラクティブステージビューとハンクステージング
ステータスビューを操作して変更を確認しステージングする:
# Tig を直接ステータスモードで開く
tig status
# ステータスビューのキー操作:
# - 'u' を押してファイルまたはハンクをステージ/アンステージ
# - 'Enter' を押して選択したファイルの差分ビューを開く
# - '1' を押して個々の行をステージング
# - 'c' を押してエディタを開きコミットを作成
tig blame を使用した回帰調査
リポジトリ履歴を通じて行の変更を追跡:
# 特定のファイルのインタラクティブな blame ビューアを起動
tig blame src/auth/jwt_validator.go
# Blame ビューでのナビゲーション:
# - 任意の行で 'Enter' を押すと、その行を導入した完全なコミット差分を表示
# - ',' を押すと、その変更より前の親コミットに対して blame を実行
# - 'q' を押して前のビューに戻る
共通パターン
#カスタム Tig キーバインド (~/.tigrc)
問題:ターミナルでの素早いステージング、リベース、ブランチチェックアウト。
解決策:~/.tigrc でカスタムホットキーを定義する。
# ~/.tigrc
# 'F' をoriginからのfetchにバインド
bind generic F !git fetch origin
# ステータスビューで 'C' を高速コミットにバインド
bind status C !git commit -v
# 'P' を現在のブランチのプッシュにバインド
bind generic P !git push origin HEAD
ベストプラクティス(2026年)
- 実施すべきこと:
~/.tigrcでmain-viewをcommit-title:graph=yes,refs=yesに設定し、明確なブランチ階層を表示する。 - 実施すべきこと:
tig blameを使用して、問題の原因となるコード行を導入したPRやコミットを素早く発見する。 - 実施すべきこと:
tig statusを利用して、個々の行ハンク(1)をレビューおよびステージングし、きめ細かくクリーンなGitコミットを行う。 - 実施すべきこと:Vimキーバインドに慣れている場合は、
.tigrcでデフォルトのナビゲーションキーをj/kに再マッピングする。 - 避けるべきこと:Tig で未解決のマージコンフリクトを放置しない。Tig を使用してコンフリクトの状態を表示し、エディタで解決する。
- 避けるべきこと:巨大なリポジトリで、ブランチやパスの制限を指定せずに、負荷の高い全履歴のTigビューを実行しない。
- 避けるべきこと:
qを押してセッションを終了せずにビュー階層を上に戻るのを忘れない。
トラブルシューティング
| エラー / 症状 | 原因 | 解決策 |
|---|---|---|
| ターミナルで色が見づらい | ターミナルテーマのコントラストがTigのデフォルトパレットと衝突 | ~/.tigrc でカスタムカラーを設定する(例:color diff-stat green default)。 |
| Tig が誤った Git リポジトリルートで開く | 現在の作業ディレクトリがサブモジュール内かリポジトリ外にある | tig を呼び出す前に git rev-parse --show-toplevel で確認する。 |
blame ビューで cannot open file: ... | ファイルがワーキングツリーで名前変更または削除された | コミット参照を明示的に指定する:tig blame HEAD~2 -- path/to/file。 |