簡介
身為工程師,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 指令。
常用快捷鍵
完整的快捷鍵可以參考 官方文件 。
下面是我最常用的幾個快捷鍵:
- 全域
h和l:上下切換左半邊的區塊。k和j:上下移動光標。/:搜尋字串。[和]:左右切換左半邊區塊的分頁。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 同步的,先用 h 和 l 切換到 Local branches 區塊,然後用 k 和 j 移動到 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 查看。
