新 Git 指令之你該試試看了

新 Git 指令之你該試試看了

前言

這一篇來記錄與分享 Git 後來出的一些新指令,我個人覺得滿實用的。

新指令

基本上我們實戰上常用的 Git 指令,不外乎就是 git addgit commitgit pushgit pull 等等(更詳細可見此文),但是 Git 後來也出了一些新指令,這邊我就來分享一下。

git switch

原本我們在切換分支時,都會使用 git checkout 這個指令,當時我在初學 Git 的時候,我對於 checkout 這個單字感到很混淆,因為直面翻譯過來是「結帳」,但是在 Git 中的意思是「切換」,而且這個指令不單只有切換分支,還有…

  • git checkout <branch>: 切換到指定分支
  • git checkout -b <branch>: 創建並切換到新分支
  • git checkout -: 切換到上一個分支
  • git checkout -- <file>: 棄用工作目錄中的修改
  • git checkout <commit>: 檢視指定 commit 的內容

可以看到 git checkout 的功能非常強大可以做的事情非常多,但是這卻也造成了初學者的困擾,因為這個指令太多功能了,所以這邊要來介紹一個新指令 git switch

git switch 指令是在 Git 2.23 版本後才出現的,而這個指令是專門「切換分支」的指令,所以不像 git checkout 這麼多功能,只要是切換分支的事情,就可以使用 git switch 這個指令,而且他的功能也比較單純,所以初學者使用起來會比較容易。

  • git switch <branch>: 切換到指定分支
  • git switch -c <branch>: 創建並切換到新分支
  • git switch -: 切換到上一個分支,例如:develop 切換到 master

是的,就是如此的簡單單純,git switch 就是專門用於切換分支、創建並切換到新分支、切換到上一個分支上,相較於 git checkout 這個指令,git switch 就是專注在「切換分支」上。

這邊我也出一個表格來做一個比較:

功能 git switch git checkout
切換分支 git switch <branch> git checkout <branch>
建立並切換新分支 git switch -c <new-branch> git checkout -b <new-branch>
切換到上一個分支 git switch - git checkout -
恢復檔案 不支援,需使用 git restore git checkout <file>
語意清晰 更專注於「分支操作」 功能多樣,可能造成混淆
Git 版本要求 Git 2.23 以上 Git 所有版本皆支援
專用性 專注於分支相關操作 同時負責分支切換與檔案恢復

git restore

git restore 其實也是為了切割 git checkout 的功能而出現的,也是讓指令語意更清晰,主要的用途就是「恢復檔案」。

  • git restore <file>: 恢復檔案
  • git restore --staged <file>: 取消暫存檔案
  • git restore --source=HEAD --staged --worktree <file>: 將暫存區與工作目錄的檔案恢復到原本的狀態
  • git restore .: 恢復所有檔案

這邊也提供一個表格來做一個比較:

功能 git checkout git restore
恢復工作目錄中的檔案 git checkout <file> git restore <file>
撤銷已暫存的檔案變更 git reset <file> git restore --staged <file>
恢復到指定提交版本 git checkout <commit> -- <file> git restore --source=<commit> <file>
恢復工作目錄 + 暫存區 git checkout <commit> -- <file> git restore --source=HEAD --staged --worktree <file>
分支切換 git checkout <branch> 不支援,需用 git switch
建立並切換新分支 git checkout -b <new-branch> 不支援,需用 git switch -c
適用場景 分支切換、檔案恢復 專注於檔案恢復
適用 Git 版本 所有 Git 版本 Git 2.23 以上

透過兩者比較其實可以看到 git checkout 的指令相對比較容易讓人混淆。

git maintenance

隨著我們專案越來越肥大,我們肯定會在專案內使用 git statusgit log 等這類指令,而這些指令將會導致 Git 的讀取效能下降,所以早期要解決這問題時,必須去手動輸入 git gcgit repack 等指令來處理,但是後來在 Git 2.30 版本後,我們可以直接透過輸入 git maintenance start 來自動化這些工作。

  • git maintenance run: 開始執行 Git 的維護工作
  • git maintenance start: 後台背景執行 Git 的維護工作
  • git maintenance stop: 停止 Git 的維護工作
  • git maintenance register: 註冊 Git 的維護工作
  • git maintenance unregister: 取消註冊 Git 的維護工作

這時候可能會有人好奇 git maintenance startgit maintenance register 差異,簡單來講就是一個是將當前的 Git 儲存庫註冊為維護工作,但是不會立即執行,而 git maintenance start 則是立即執行,而這個 start 是針對有註冊過的 Git 儲存庫為主。

所以 git maintenance 的正確使用流程是:

  1. git maintenance register: 註冊 Git 的維護工作
  2. git maintenance start: 開始執行 Git 的維護工作

就這樣,如果你想要立即執行的話,只需要使用 git maintenance run 就可以了。

其他指令

以上算是我個人有使用並且正在使用的指令,當然不只有這些,還有一些其他指令:

  • git sparse-checkout
  • git log --remerge-diff
  • git blame --ignore-rev
  • git range-diff
  • git worktree
  • git rebase --update-refs
  • git bugreport
  • git for-each-repo

這幾個指令是相對比較新的指令,但是我個人沒有使用過,所以這邊就不多做介紹,畢竟還是以實務面的 80/20 原則為主。

參考文件

Liker 讚賞

這篇文章如果對你有幫助,你可以花 30 秒登入 LikeCoin 並點擊下方拍手按鈕(最多五下)免費支持與牡蠣鼓勵我。
或者你可以也可以請我「喝一杯咖啡(Donate)」。

Buy Me A Coffee Buy Me A Coffee

Google AD

撰寫一篇文章其實真的很花時間,如果你願意「關閉 Adblock (廣告阻擋器)」來支持我的話,我會非常感謝你 ヽ(・∀・)ノ