Conventional Commits 的實踐指南:寫出乾淨的提交訊息
前言:
你是不是也常遇到這樣的情況:翻開 Git 的 Commit 記錄,滿滿的「Update」、「Fix bug」或乾脆直接用 emoji 混過去。在團隊協作中,這種隨意的 Commit Message 不但讓歷史紀錄難以理解,還可能拖累整個專案的自動化流程,甚至影響版本管理的準確性。這就是 Conventional Commit 派上用場的時候了!它是一套簡單又實用的規範,幫助你把 Commit Message 寫得清楚又有條理。不僅讓版本歷史一目了然,還能輕鬆實現自動生成變更日誌,甚至和語意化版本控制(Semantic Versioning)無縫接軌。
接下來,這篇文章會一步步帶你了解什麼是 Conventional Commit、它的格式怎麼寫、為什麼它能對專案有幫助,以及在日常開發中要怎麼用它來讓你的工作更高效,讓團隊合作更順暢!
什麼是 Conventional Commit?
定義與目的
簡單來說,Conventional Commit 就是一套用來規範 Git Commit Message 的寫法規則。它的目的是幫助我們在版本控制中維持一致性與可讀性,同時為自動化工具提供足夠的資訊,讓整個開發流程更有效率。
那為什麼要這麼麻煩規範 Commit Message 呢?其實,Conventional Commit 的好處不只是看起來整齊,它還能幫助你做到以下幾件事:
-
提升版本控制的可讀性
清楚的 Commit Message 讓團隊中的每個人都能快速理解變更內容,甚至可以直接找到問題的根源。 -
支援自動生成變更日誌(Change Log)
根據規範好的 Message,工具可以自動整理出完整的變更日誌,節省手動編寫的時間。 -
輔助語意化版本控制(Semantic Versioning)
結合 Semantic Versioning,可以根據不同類型的 Commit 自動決定版本號的升級方式,讓版本管理更加可靠。
基本格式
Conventional Commit 的格式其實很簡單,看起來像這樣:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
讓我們來分解一下每個部分的用途:
-
type(Commit 類型): 描述這次 Commit 的性質,例如是新增功能(feat)、修復問題(fix),還是進行雜項更新(chore)。 -
scope(影響範圍,可選): 用來標記這次變更影響的範圍,比如是哪個模組或功能。如果影響範圍明確,建議加上,能讓訊息更清楚。 -
description(簡短描述): 一句話清楚說明這次 Commit 的內容。最好簡短有力,保持在 50 字以內。 -
body(詳細說明,可選): 如果需要,可以在這裡詳細描述 Commit 的背景、動機或實現方式。 -
footer(註解或 Breaking Change,可選): 用來記錄像 Breaking Change 的訊息,或者相關 Issue 的 ID。例如:BREAKING CHANGE: 改變了 API 的回傳結構
Resolves #123
與 Semantic Versioning 的關係
Conventional Commit 和 Semantic Versioning(語意化版本控制) 是一對好搭檔。後者使用版本號的格式 MAJOR.MINOR.PATCH,分別代表:
- MAJOR:重大改動(可能破壞向後相容性)
- MINOR:新增功能(不影響向後相容性)
- PATCH:修正錯誤(不影響向後相容性)
而 Conventional Commit 的規範則可以幫助我們自動決定版本號的升級規則:
- 使用
fix的 Commit,通常只影響 PATCH 版本,表示修正錯誤。 - 使用
feat的 Commit,會影響 MINOR 版本,表示新增功能。 - 如果有 BREAKING CHANGE,就會升級 MAJOR 版本,因為改動可能影響到向後相容性。