Sep 30, 2025

Git Commit Message 演進筆記:Conventional Commits

為什麼要使用 Conventional Commits?

  • 方便追蹤修改原因:當需要找回過去改動的原因時,比起隨意的 commit message 更容易查找。

  • 快速理解 log:只要看 log 就能知道這次改了什麼,不用再打開整個程式碼去猜。

  • 提升維護效率:讓團隊合作或自己後續維護專案時更清楚、有效率。


Commit Message 範例

格式

Markdown
      <type>(<scope>): <description>

<body>

issue: #<issue number>
    

常用的 type 說明與範例

feat

新功能、新介面、新流程

Markdown
      feat(auth): 新增使用者登入功能

新增使用者登入 API,支援 email 與密碼驗證。
登入成功後會回傳 JWT Token,供後續 API 認證使用。
    

fix

修 bug、邏輯錯誤、漏寫條件

Markdown
      fix(post): 修正貼文新增功能時,未正確帶入使用者 ID

修正資料庫插入時,因變數命名錯誤導致 user_id 為空值的問題。
已新增對 user_id 的驗證,避免類似錯誤。
    

refactor

改寫程式、但功能不變

Markdown
      refactor(order): 重構訂單計算邏輯

將訂單價格計算邏輯拆成獨立模組,提升可維護性。
修正部分邏輯錯誤,優化程式可讀性。
    

style

空格、命名、排版

Markdown
      style(ui): 調整按鈕樣式排版 
    

docs

README、註解、說明文件

Markdown
      docs(readme): 更新專案設定文件

新增 API 使用範例,補充專案啟動步驟與環境變數設定。
    

chore

升版本、搬套件、加工具

Markdown
      chore(build): 更新依賴套件版本

升級 Node.js 至 v20,更新主要依賴套件版本。
修正部分相容性問題。
    

perf

效能提升、跑更快

Markdown
      perf(order): 優化訂單查詢速度

改用索引優化資料庫查詢,降低查詢時間。
提升 API 回應效率。

issue: #55
    

另外還有 cibuildtest 等 type,適合有 CI/CD 或測試流程的專案使用。

📌 小提醒:

用 Conventional Commits 寫 message,最好保持一致,這樣回頭看 log 或生成 changelog 會更有效率。


最後的想法

初次進入職場的時候,我常看到舊專案的程式碼裡有很多註解,但問題是註解很少隨著程式碼更新。 結果就是,註解和實際的程式碼常常對不起來,反而會造成更多誤解。

這讓我開始思考:「如果註解不可靠,那我要怎麼更清楚記錄程式的變化呢?」 後來接觸到 Conventional Commits,才發現原來 commit message 也可以成為專案的紀錄方式。

對我來說,這是一個新的習慣:

  • 註解不再是唯一的說明來源

  • commit message 本身就能幫助追蹤歷史、理解修改原因

雖然我還在練習怎麼把 message 寫得更精準,但已經開始感受到它對維護專案的幫助。