簡介

身為工程師,Git 可以說是吃飯用的工具, Lazygit 是一個用 Golang 寫的 Git 命令列工具,可以大量節省敲 Git 指令的時間。每次省個幾秒鐘,一年省了好幾個小時。

不要跟我說你敲指令很快(你只是懶得多學新工具),或是用了什麼 alias gs='git status' 之類的化名來幫忙你敲得比較快(你只是覺得學很多快捷鍵很恐怖),相信我,絕對不可能比用這個工具還快。

安裝步驟就不詳述了,請看 官方文件

介面

安裝完之後在 Repository 底下執行 lazygit 就可以開啟介面。我設了一個化名 alias lg='lazygit' 幫助我敲得更快。

介面主要分為左半邊和右半邊,左半邊有 5 塊,分別是 Status、Files、Local branches、Commits、Stash,其中某些區塊還有分頁可以切換,例如 Files 那個區塊就還有 Worktrees 和 Submodules 這 2 個分頁。

右半邊有兩塊區域,分別是詳細資訊的預覽,以及每個快捷鍵底下呼叫了什麼對應的 Git 指令。

常用快捷鍵

完整的快捷鍵可以參考 官方文件

下面是我最常用的幾個快捷鍵:

  • 全域
    • hl:上下切換左半邊的區塊。
    • kj:上下移動光標。
    • /:搜尋字串。
    • []:左右切換左半邊區塊的分頁。
    • Ctrl + o:複製檔名(Files 區塊)、Branch 名稱(Local branches 區塊)、或是 commit hash(commits 區塊)到剪貼簿。
    • q:退出 Lazygit。
  • 左半邊 Files 區塊
    • 空白鍵:把該檔案加入或移除自 staging area。
    • a:把全部檔案加入或移除自 staging area。
    • Enter:用在資料夾上為折疊或展開資料夾,用在檔案上則是進入右半邊的檔案預覽區塊。
    • C:打開外部的文字編輯器,讓我們可以編輯 commit message,之後 commit。
    • A:Amend commit。
    • d:取消該檔案還沒有被 commit 的所有變更,注意如果該檔案是新建立的,會被刪除。
    • D:清空所有檔案還沒有被 commit 的所有變更,當你在做功能的時候不小心搞砸了想重來的時候用的。
    • S:打開 stash 選項。
  • 左半邊 Local branches 區塊
    • 空白鍵:切換到該 branch。
    • n:從該 branch checkout 出一個新的 branch。
    • f:Fetch 該 branch 在 remote 的新 commits。
    • r:Rebase 到該 branch 上面。
    • R:重新命名 branch。
    • p:Pull 該 branch。
    • P:Push 該 branch。
    • o:開啟 GitHub open pull request 的頁面。
    • Enter:查看該 branch 的 commit。使用 Esc 返回。
  • 左半邊 Commits 區塊
    • Enter:查看該 commit 改了哪些檔案。使用 Esc 返回。
    • R:打開外部編輯器更改 commit message。
    • d:刪掉該 commit。
    • g:打開 reset 選項。
    • F:創一個對該 commit 的 fixup! commit。
    • S:Squash 所有在該 commit 之上的 fixup! commits。
  • 左半邊 Stash 區塊
    • g:套用並刪除該 stash。
    • 空白鍵:套用但不刪除該 stash。
    • d:刪除該 stash。
  • 右半邊預覽區塊
    • v:進入多行選取模式。
    • 空白鍵:把該行,或是多行(用多行選取模式選取的話)加入或移除自 staging area。
    • Esc:回到左半邊的區塊。

實戰

結合一下之前的 開發開源專案常用的 Git 操作指南 這篇文章,講解一下我怎麼用 Lazygit 來開發開源專案。

開新的 Branch

首先當然是要確保 upstream-master 這個 branch 是和 remote 同步的,先用 hl 切換到 Local branches 區塊,然後用 kj 移動到 upstream-master 這個 branch 上面,之後按 f 去抓取最新變更。接著按 n 開一個新的 branch 即可。

同步 Upstream

一樣先移動到 Local branches 區塊的 upstream-master 這個 branch 上面,然後按 f 抓取最新變更,之後按 r rebase 到上面。

開發及開 Pull Request

移動到 Files 區塊,使用空白鍵一個一個把檔案加到 staging area,或使用 a 一次加入所有檔案,然後按 C commit,之後移動到 Local branches 區塊想要 push 的 branch 上面按 P push,最後按 o 開啟 GitHub pull request 的頁面。

結語

一開始你可能會覺得快捷鍵很多很難學,但用久了就會變成肌肉記憶,省下的時間絕對值得。

如果想了解更多的功能,請到官方的 repo 查看。