擺脫 Git Log 亂象!一次搞懂 feat, fix, refactor 等 Commit Message 規範

你是否曾經打開專案的 Git 紀錄 (git log),卻看到一整排像是「update」、「fix bug」、「修改」、「暫存」這樣毫無意義的訊息?

身為開發者,我們都知道寫好程式碼很重要,但寫好 Commit Message (提交訊息) 同樣關鍵。一個好的 Commit Message 就像是程式碼的導航圖,能幫助團隊成員(還有未來的你自己)快速理解這段程式碼「改了什麼」以及「為什麼要改」。

今天這篇文章,我們將用最簡單、好理解的方式,介紹目前業界最主流的 Commit Message 規範(通常參考自 Conventional Commits 或 Angular 規範),讓你從此告別混亂的版控紀錄!

為什麼我們需要 Commit Message 規範?

在進入正題之前,先想像一下:如果你在圖書館找書,但書背上都沒有書名,只貼了「新書」、「舊書」、「好看」的標籤,你找得到你要的資料嗎?

Git Commit 規範就是為你的程式碼變動貼上正確的分類標籤。這樣做有三個巨大的好處:

  1. 一目瞭然:不用看程式碼,光看標題就知道這次改動是新增功能、修 Bug 還是單純排版。
  2. 自動化:規範化的訊息可以配合工具自動產生 ChangeLog (更新日誌)。
  3. 團隊協作:減少溝通成本,Code Review 更有效率。

必學的 9 大 Commit 類型 (Type)

我們通常會在 Commit Message 的開頭加上一個「前綴詞 (Prefix)」,格式通常長這樣:

type: subject (例如:feat: 新增會員登入功能)

以下是 9 個你最需要知道的標準類型,我已經將它們分類並解釋如下:

1. 功能開發與修復 (最常用)

這是你日常開發中最常使用的兩個標籤:

  • feat (Feature)
    • 含義:新增/修改功能。
    • 什麼時候用:當你寫了一個新的功能,或是對現有功能做了明顯的修改時。
    • 範例feat: 新增使用者上傳大頭貼功能
  • fix (Bug fix)
    • 含義:修補 bug。
    • 什麼時候用:當程式碼出現錯誤,你進行了修復時。
    • 範例fix: 修正購物車金額計算錯誤的問題

2. 程式碼品質與整理 (不影響功能)

這些改動不會改變程式原本的邏輯或功能,純粹是為了讓程式碼更好讀、更乾淨:

  • docs (Documentation)
    • 含義:文件。
    • 什麼時候用:你只改了註解、README.md 或其他說明文件,完全沒動到程式邏輯。
    • 範例docs: 更新 API 使用說明文件
  • style (Formatting)
    • 含義:格式變動 (不影響程式碼運行的變動)。
    • 什麼時候用
      修正空白鍵、縮排、補上分號、換行等。
      注意!這不是指 CSS 的樣式修改,而是指「程式碼的寫作風格」。
    • 範例style: 修正 main.js 的縮排格式
  • refactor (Refactoring)
    • 含義:重構。
    • 什麼時候用
      這是一個很重要的標籤。指既不是新增功能,也不是修補 Bug 的程式碼變動。
      通常是為了讓程式架構更好、更乾淨而做的修改。
    • 範例refactor: 優化訂單處理流程的程式結構

3. 效能與測試

  • perf (Performance)
    • 含義:改善效能。
    • 什麼時候用:專門針對提升程式執行速度、記憶體優化的改動。
    • 範例perf: 優化圖片載入速度,減少 50% 等待時間
  • test (Tests)
    • 含義:增加測試。
    • 什麼時候用:補上遺漏的測試案例,或是修改現有的測試程式碼。
    • 範例test: 新增登入模組的單元測試

4. 維護與其他

  • chore (Chores)
    • 含義:雜務、建構程序或輔助工具的變動。
    • 什麼時候用
      這通常指那些「不影響正式發佈版本」的修改。
      例如修改 .gitignore、更新 npm 套件、調整打包設定 (Webpack/Vite) 等。
    • 範例chore: 更新專案依賴套件至最新版本
  • revert (Revert)
    • 含義:撤銷回覆先前的 commit。
    • 什麼時候用:當你發現某個版本有大問題,需要直接退回到之前的狀態時。
    • 範例revert: fix(auth): 移除錯誤的驗證邏輯 (回覆版本:a1b2c3d)

總結表格:快速對照

為了方便記憶,我整理了這張速查表,建議你可以存下來:

類型英文標籤說明適用情境
功能featFeature新增或修改各項功能
修復fixBug Fix修正程式錯誤 (Bug)
文件docsDocumentation修改 README、註解、文件
格式styleStyles調整縮排、空白、分號 (不影響邏輯)
重構refactorRefactor整理程式碼結構 (無新功能/無修Bug)
效能perfPerformance提升效能、優化速度
測試testTests新增或修改測試案例
雜項choreChores修改設定檔、更新依賴套件
復原revertRevert取消先前的提交

結論

養成良好的 Commit Message 習慣,起初可能會覺得有點麻煩,要記這麼多英文縮寫。但相信我這是一個專業工程師養成的必經之路。

當你三個月後回頭看自己的程式碼,或者當你的同事接手你的專案時,看到整齊劃一的 feat, fix, refactor,他們會發自內心地感謝你。

從今天的下一個 Commit 開始,試著加上這些前綴吧!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端