Categories
通風報信

tig ── git 的命令列好夥伴

tig
tig

一直以來我在會用到 git 的機器上都會裝 tig ,但也只是用到閱覽 commit 的用途,直到最近看到有 .tigrc 這種東西,再看了一下別人的設定用法,這才知道我根本不會用 tig,也才發現原來 tig 可以用來補足 git 那麼差的使用體驗。

由於 tig 的使用說明雖然詳盡但並不是很容易理解,這裡還是稍微提一下基本的使用方式。
在使用 git 的專案底下輸入 tig 指令後,預設會看到是閱覽 commit log 的畫面,也就是所謂的 main view,可以 j/k 上下移動, enter 查看 commit 的詳細 diff 變更,然後用 q 關閉 diff 畫面。

在 main view 底下對選中的 commit 按 t 可以進到 tree view,直接查看 commit 當時的 repo 檔案內容,省去 git checkout 的麻煩。

在其它的 view 可以用大寫 S 切換到 status view,然後就能用 u 來把檔案加入或移出這次的 commit,或是對檔案按 enter 查看 diff 變更,此時可以用 @ 往下選 chunk,再按 u 來只加入選中的 chunk,或是用 j/k 上下移動,按數字 1 來只加入單行的修改,最後按 q 跳出 diff 再按下大寫 C 就能 git commit 了。

前面講的 status view,也可以用 tig status 直接進入,另外也推薦用 tig blame 來代替 git blame。

還有 tig 指令後面接 branch 名稱可以直接查看分支,接著在分支 commit 上按大寫 C 可以 cherry-pick 回目前的 branch,而 tig 後面接檔名的話可以直接查看跟這個檔案有關的 commit,更多的基本功能介紹可以看 git? tig! 這篇文章。

接下來要講的是用家目錄底下的 .tigrc 自訂的進階功能。雖然 tigrc 的使用說明裡面有不少內容,但我這邊只大略提一下 BIND 的功能。

# User-defined external command to amend the last commit
bind status + !git commit --amend

以上面這段為例,指的是在 status view 底下,按下 + 會執行 git commit –amend,而 ! 表示會顯示執行結果。

bind main = !git commit --fixup=%(commit)

而在 main view 裡面想對選中的 commit 執行指令則可以像上面那樣代入變數。

結論就是,在 command line 用 git 又沒搭配 tig 的人實在太可惜啦!

3 replies on “tig ── git 的命令列好夥伴”