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

???? 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 文檔.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本片內容轉自CSDN http://blog.csdn.net/ithomer/article/details/7...
    五娃兒閱讀 4,956評論 2 88
  • 因為原文太長超出字數,Lesson 3 就放在另一篇文章里 How to Use Git and GitHub 標...
    赤樂君閱讀 5,272評論 1 5
  • 霧失樓臺,月迷津渡,桃源望斷無尋處??煽肮吗^閉春寒,杜鵑聲里斜陽暮。驛寄梅花,魚傳尺素,切成此恨無重塑。郴(che...
    Www劉閱讀 412評論 1 0
  • 我的飛機真可悲, 長了翅膀不能飛。 天生缺陷說不得, 再多努力也成灰。 我不是不相信你, 我只是不相信紙飛機, 從...
    簡村小吹閱讀 265評論 0 5
  • 買好看的筆和笨才有寫字的心情 筆記本上貼滿粘貼舍不得用 喝奶茶不咬吸管就難受 或許看起來是個可愛的女生,但...
    那朵花的名字4閱讀 179評論 0 1