顛覆Git 命令使用體驗的神器 tig

2021-09-08 05:22:47 字數 3818 閱讀 2719

tig, 就是把 git 這個單詞倒過來念, 它是乙個命令列工具, 日常使用中我用它來取代 git 最高頻的幾個操作, 如 git log, git diff 以及 git blame等, 使用常見安裝源能夠方便地安裝它.

ubuntu: sudo apt-get install tig

macos: brew install tig

git 和 tig 的關係有點像 top 和 htop, 是一種命令列互動式操作工具 tig 的所有功能都是 git 命令列已經具備的,  tig 提供了一種直觀, 方便快捷的 git 操作.

在 git 專案中敲 tig, 進入 tig 介面後再敲 h (代表help) 即可進入幫助介面, 該介面列出了所有常用命令專案分支下直接敲 tig, 進入到了 log 介面, 使用 j/k 或 上/下 鍵可以選擇指定提交, 回車後, 介面的一半會展示此次commit詳情, 此時, 上/下 鍵可以選擇 log 中的 commit, 詳情介面會跟著變化, 而 j/k 鍵會在 commit 詳情內移動焦點, 選中 commit 中列出的檔案, 回車會跳轉到該檔案的詳情, 而使用 @ 可以按照**塊的粒度來瀏覽 commit 中的內容, 通過這些操作, 我們可以很容易的快速瀏覽log 中多個commit 中的內容, 而這一點通過 git 命令或 gui 都是很難快速方便的完成的.

快速檢視 log 詳情及 help

在使用 git 命令的過程中, 最高頻的命令應該是 git status, 主要用來檢視 staged changes 和 unstaged changes, 通過 tig, 可以很方便的像剛才檢視 commit 那樣檢視 staged changes 和 unstaged changes, 敲 tig 進入 log 介面後, 排在最上面的便是 staged changes 和 unstaged changes, 至此, staged changes 和 unstaged changes 就像乙個 commit 一樣被方便地展示出來了, 敲回車, 詳情介面展示出來後敲 u 會使整個 changes 由staged changes 變為 unstaged changes, 或是由unstaged changes 變為 staged changes, 如果想要 changes 中的某乙個檔案改變狀態, 則在詳情介面選中該檔案, 回車, 再敲 u ,即可使該檔案由 staged 變為 unstaged, 或是由 unstaged 變為 staged, 如果你想重置某個檔案的修改, 選中該檔案敲 ! 即可, 再也不用使用 git reset head這個命令了.

log 介面最上方可以檢視未提交修改

如果我還想看 untracked files 怎麼辦呢? tig 提供了一種更純粹的檢視 git status 的介面, 進入 tig 後直接敲 s 即可, 選中 untracked file 或 unstaged file, 敲 u, 即可變為 staged file, 選中 staged file 敲 u 變為 unstaged file, 如果你想重置某個檔案未儲存的修改, 在該檔案下敲 ! 即可, 如果你準備好提交了, 按下 shift + c 即可開啟預設命令列編輯器來編輯 commit message, 如果在 tig 主介面按下shift + c, 將會使用 git cherry-pick 命令.

tig 的 status 介面

tig 也可以當做命令列版的 finder 來使用, 在 log 主介面敲 t (代表 tree) 即可進入此次 commit 中所有檔案列表, 在資料夾下回車可以進入資料夾, 在檔案下回車可以在介面的一半展示該檔案的全貌(而不是此次 commit 的修改).

tree 介面

如果選中檔案, 按 b 即可進入該檔案的 blame 介面, 在 blame 中選中任意一行回車, 即可在介面的一半展示此次 commit 的所有內容, 依然可以用 j/k 控制詳情內容的單行移動, 回車跳轉到某檔案, @按照**塊粒度滾動, 這種操作比使用 git blame 方便了許多.

blame 介面下快速檢視 commit 全貌

如何檢視 diff 中某句修改時整個檔案的面貌呢? 實際上在 diff 介面也可以直接敲 b 進入 blame 介面即可檢視截止此次提交時該檔案的全貌, 如果明確知道想要看哪個檔案的 blame 全貌, 也可以 直接使用 tig blame filename.

如何檢視乙個檔案的全部提交記錄? 以及快速檢視某次提交的全部內容? 有了 tig, 可以輕鬆做到這一點, 直接 tig filename, 進入到該檔案的 tig 主介面, 即可快速檢視指定檔案的 log 和提交內容, 你還可以選擇只檢視某個 commit 以及之前的提交, 只需要使用 tig commit-id filename 即可.

如何查詢 commit message 中帶有指定文字的 commit 呢? 如果終端本身支援搜尋功能, 使用終端自帶的 cmd + f 即可搜尋 tig 主介面中的任何文字, 那如何通過 commit-id 查詢呢? tig 主介面中預設沒有展示 commit-id, 使用 shift + x 即可展示 commit-id.

tig 也自帶搜尋功能, 敲 / 即可進入, 輸入字元後回車, 將高亮展示所有匹配項, 敲 n 將聚焦到離當前焦點最近的下方的匹配項, 大寫 n 則是上方的匹配項, 敲回車將展示詳情.

tig 的原生搜尋功能

在提交 commit 中常常會碰到按**塊的粒度來提交的需求, 使用原生的 git add -i 略顯繁瑣, 在 tig 中, 這個操作變得無比簡單, 只需要在 staged changes 或 unstaged changes 使用 @ 選中**塊, 敲 u 即可改變狀態, 如果你只想改變一行**的狀態, 使用 j/k 選中要改變的單行**, 用數字鍵 1 代替 u 即可實現這個原本用 git 命令列很難實現的功能.

進入 tig 主介面敲 r 即可看到專案分支列表, 在分支下敲回車即可進入 log 介面, 使用這個功能可以快速在不同分支之間查閱**, 免去了頻繁切換分支的麻煩, 需要切換分支時, 選中分支按住 shift + c 即可.

快速在不同分支中檢視具體 commit

至此, 我分享了一些日常使用頻率很高, 但使用 git 命令來完成卻很繁瑣的 tig 使用攻略, 文章最後, 我想分享乙個學習 git 命令的捷徑, 我在學習 git 的過程中, 自己覺得還是走了一點彎路, 如果你知道 oh-my-zsh 的 git aliases, 你就知道我在說什麼了, 這份 aliases 整理了所有常用和有用的 git 命令, 初學者通過它能避免冗長的 git 命令打擊熱情, 也可以避免在不實用的 git 命令上多花時間, 有經驗的開發者可以通過它來查漏補缺, 看看哪些看似無用的 git 命令加引數後就變得無比實用. 如果在乙個團隊中推廣這份 aliases , 可以避免你在隊友的電腦上習慣性敲自己編的 alias 無效的麻煩, 如果你使用 dash, 可以直接搜尋 oh-my-zsh git 新增這份 aliases 文件.

參考:

tig 顛覆 Git 命令使用體驗的神器

tig,就是把 git 這個單詞倒過來念,它是乙個命令列工具,日常使用中我用它來取代 git 最高頻的幾個操作,如 git log,git diff 以及 git blame等,使用常見安裝源能夠方便地安裝它.sudo apt get install tig在使用 git 命令的過程中,最高頻的命令...

git命令的使用

最近換了一家公司,專案是使用git託管的,以前都是用的svn,所以在這裡寫一篇關git的使用心得和一些關於git的筆記 首先git與svn的區別 git是分布式的,svn不是 git把內容按元資料方式儲存,而svn是按檔案 git分支和svn的分支不同 git沒有乙個全域性的版本號,而svn有 gi...

git命令的使用

1.在所在專案的資料夾下 git init 2.自己要與origin master建立連線 下劃線為遠端倉庫鏈結 git remote add origin git github.com x nothing2.git 3.寫本次提交的注釋資訊 git commint m first commit 4...