有效的 Git 使用仰賴一套精簡且可重複的十二個指令,依照「先檢查再變更」的順序執行:初始化或複製儲存庫、讀取工作樹狀態、暫存刻意安排的變更、以具備意圖的訊息提交,再透過分支、擷取與推送的順序發布,以保留團隊共享的歷史紀錄。這件事之所以重要,是因為 Git 獎勵的是習慣而非背誦:一位開發者若總是在暫存前先讀取狀態、在提交前先看差異、在推送前先查看遠端狀態,就很少需要重寫歷史、遺失工作成果,或讓協作者感到錯愕。指令本身雖然簡短,真正能將一份工作複本轉化為乾淨、可復原歷史的,是指令的擺放順序、佔位符的位置,以及圍繞它們的檢查步驟。一份涵蓋設定、檢查、暫存、提交、分支、擷取與推送——並刻意省略具破壞性的還原指令——的精煉參考文件,會比一張將安全預設與不可逆清理混雜在一起的龐大別名表,更適合作為可靠的日常工具。

how to use git effectively
如何有效使用 git

「有效使用 Git」真正的含義

Git 是內容定址的檔案系統,上方再疊上一層傳輸協定,但多數日常工作其實都歸結為四個問題:我在儲存庫的哪裡、自上次查看之後改變了什麼、我想記錄哪些內容,以及它如何離開我的機器。有效使用意味著以明確的指令回答每個問題,而非仰賴終端機輸出、自動完成或背誦的別名來猜測。區分自信的 Git 使用者與謹慎使用者的行為差異,並非指令的廣度——而是紀律:在 git add 之前先執行 git status --short、在 git commit 之前先執行 git diff、在 git push 之前先執行 git fetch --prune。每次檢查只花不到一秒,卻能把假設轉為證據。當檢查步驟被跳過時,原本通常能正常運作的指令,會變成偶爾覆蓋同事分支、或將憑證檔案納入公開提交的指令。

有效性也意味著選擇與現代 Git 說明文件一致的指令。switch 與 restore 取代了 checkout,用於分支與檔案移動;明確的 push 旗標取代了舊有隱式上游設定;加上 prune 的 fetch 取代了手動的遠端清理。一份能跟上當前詞彙的參考文件,能讓肌肉記憶與隊友、程式碼審查者與 CI 紀錄實際輸出的內容保持一致。

涵蓋日常工作的十二個指令

Git 速查表收錄了十二個經來源核對的範本,每一個都對照官方 Git 參考手冊以及獨立的教學來源交叉驗證。它們依工作流程階段而非字母順序分組,因此搜尋欄可接受分類、動詞,或你心中想達成的目的。

階段指令範本用途
設定git init在當前目錄中初始化一個新的儲存庫
設定git clone <url>下載既有的儲存庫及其歷史紀錄
檢查git status --short摘要列出已追蹤、已暫存、已修改、已刪除與未追蹤的路徑
檢查git diff顯示未暫存的工作樹變更
檢查git log --oneline --decorate -n 10顯示十筆含有分支與標籤標記的提交
暫存git add <path>將指定路徑暫存至索引中
提交git commit -m <message>以內嵌訊息記錄已暫存的快照
分支git branch --show-current印出當前分支的名稱
分支git switch <branch>切換至既有的本地分支
分支git switch -c <branch>建立新的本地分支並切換至該分支
遠端git fetch --prune下載遠端參考並移除過時的追蹤名稱
遠端git push -u origin <branch>發布當前分支並記錄上游

每個項目對應前述四個問題之一:clone 或 init 設定起點;三個檢查指令建立事實基礎;commit 記錄一份刻意安排的快照;分支與遠端指令移動並發布該快照,且不重寫歷史。精簡是刻意的設計。別名、低階指令與還原指令屬於更長篇的參考文件;日常節奏則屬於短篇的參考。

如何從速查表取用指令

  1. 開啟 Git 速查表,並依指令名稱(例如「fetch」)、分類(例如「remote」),或用途(例如「publish a branch」)進行搜尋。
  2. 閱讀對應項目下方的說明,找出指令所預期的所有角括號佔位符——<url>、<path>、<message>、<branch>。
  3. 在複製前,從 shell 進行快速的預檢查:以 pwd 與 ls .git 確認工作目錄為儲存庫根目錄,以 git branch --show-current 讀取當前分支,並以 git remote -v 確認已設定的遠端。
  4. 將每個佔位符替換為實際的值(括號本身一併移除);不要將角括號原樣輸入。若路徑或訊息中含有空格或對 shell 具特殊意義的字元,請加上引號。
  5. 複製解析後的指令,貼到 shell 中,並擷取退出代碼與任何非敏感的輸出供後續檢視。
  6. 執行與指令類別對應的後續檢查:暫存後執行 git status --short,提交後執行 git log --oneline --decorate -n 10,或擷取遠端狀態後執行 git fetch --prune 並接著執行 git branch -avv。

在你選擇複製文字之前,速查表是本機且唯讀的。它從不開啟儲存庫、從不執行指令、也從不上傳資料,因此 shell、工作目錄、勾子與團隊政策的責任,在每一步驟中仍由操作者承擔。

佔位符紀律與 Shell 引號

表中的每個範本都以角括號標記讀者必須自行提供的值。請將整個佔位符——包含括號——一併替換掉:git commit -m "Fix off-by-one in invoice total" 是正確的寫法;git commit -m <Fix off-by-one in invoice total> 則不正確。若路徑或訊息中含有空格、撇號或 shell 會解讀的字元,請以成對的引號包裹,讓 shell 將其作為單一參數傳遞給 Git,而非拆分成多個。同樣的規則亦適用於組成中含有冒號、@ 符號或查詢字串的 URL。此步驟的紀律,正是「安靜地能用」與「安靜地失敗」——或更糟,「針對錯誤的儲存庫成功,因為相對路徑解析到了錯誤的檔案」——之間的分野。

當自動化程式呼叫 Git 時,請以絕對路徑鎖定工作目錄、明確處理非零退出代碼,並擷取足夠的非敏感輸出以診斷部分失敗,同時不洩漏憑證。速查表不會儲存或傳輸你所代入的值,但你機器上的 shell 歷史紀錄會,因此絕絕絕絕不要將機密資訊貼入提交訊息或遠端 URL。

先檢查,再檢查一次

保護歷史的單一習慣,就是在每次變更前後皆執行檢查指令。git status --short 提供每個路徑一行的摘要,短到足以每次都完整讀完:兩欄分別代表索引與工作樹,加上問號或驚嘆號標示未追蹤或被忽略的項目。git diff 顯示未暫存的工作樹變更;git diff --cached 則顯示已暫存的變更——這才是提交實際會記錄的內容。在提交前閱讀差異,能將「我覺得我改了一行」轉化為一份即將進入歷史的每一行的逐項核對清單。若需要更深入的檢查,可將這些指令與分支差異指南搭配使用,以便在合併前比較兩個分支。

精簡且附標記的紀錄會顯示十筆含有分支與標籤指標的提交,這在一般作業流程中足以辨識錯誤的分支或遺漏的提交。更深入的診斷——bisect、路徑受限的紀錄、reflog——屬於更長篇的參考文件,但原則不變:閱讀儲存庫中實際存在的內容,而非憑記憶推測的內容。在提交或推送前請立即重新檢查,因為在兩次檢查之間,另一個程序、編輯器、勾子或協作者都可能改變檔案或參考。

速查表刻意省略的內容

短篇、日常使用的參考文件,並不適合放入 force push、git reset --hard、git clean、git rebase 或重寫歷史的指令。這些指令可能會捨棄工作成果或重寫共享歷史,而其安全性取決於儲存庫特定的脈絡:哪些分支受到保護、團隊是否對自身分支進行 force push、存在哪些備份參考、哪些提交已經上線。省略它們是特色而非缺陷。git push --force 的可複製範本無法警告讀者隊友一小時前剛推送了兩筆提交,而 git reset --hard 的範本也無法告訴讀者他們即將遺失的工作從未被提交。面對具破壞性的變更時,請參考官方 Git 參考手冊以及專案說明文件,並先建立可復原的分支或備份。

該表也不包含 rebase、cherry-pick、stash 或 submodule。這些指令在成熟的工作流程中各有其位,但單一開發者於單一儲存庫內的日常節奏,已由前述十二個項目完整涵蓋。

每日可重複執行的 Git 流程

把這十二個指令組合成一個流程,使其與表格相呼應。每天開始時先執行 git fetch --prune 並快速查看 git status --short;接著用 git switch 或 git switch -c 切換或建立與工單對應的分支;進行編輯;透過 git diff 確認變更內容;使用 git add <path> 只暫存特定路徑,而非整個目錄樹;以 git commit -m <message> 提交,訊息說明「為什麼」而非「怎麼做」;分支首次發布時用 git push -u origin <branch>,之後則用一般的 git push 作結尾。每次轉換都以檢查作為關卡,因此錯誤的路徑或遺漏的檔案會在進入歷史紀錄前就顯現出來,而不是等到程式碼審查時才被發現。

指令本身並不會因為專案不同而改變——無論是全新的 git init、剛克隆下來的開源儲存庫,還是長期維護的 monorepo,這十二個項目都同樣適用。會改變的是紀律:依序執行、如實替換佔位符,並在每次提交與推送前立即重新檢查。這種紀律才是「有效率地使用 Git」的真正意涵,也是這份 Git 速查表設計上要強化的重點。若想進一步閱讀這些範本背後的旗標背景,Atlassian Git tutorials 以較長篇的敘述脈絡說明了相同的工作流程。

延伸閱讀:Inspect Text with a Clipboard Viewer Online Bulk。