[Git] Commit Message 到底要怎麼寫才好維護?
前言
剛開始使用 Git 的時候,我其實也常常把 commit message 寫得很隨意。
例如:
1 | git commit -m "update" |
當下看起來沒有問題,因為自己還記得剛剛改了什麼。
但只要過了一兩週,或是專案裡有其他人一起開發,再回頭看這些 commit,就會發現它們幾乎沒有提供任何有效資訊。
這篇就整理一下,我自己在寫 commit message 時會注意的幾個方向。
Commit Message 的用途
commit message 不是寫給 Git 看的,而是寫給「未來需要理解這段變更的人」看的。
這個人可能是同事,也可能是幾個月後的自己。
好的 commit message 至少要能回答兩個問題:
- 這次改了什麼?
- 為什麼要這樣改?
如果 commit message 只寫 fix,那未來看到的人就只能進 diff 裡慢慢猜。
可以用動詞開頭
我自己會習慣用一個清楚的動詞開頭,讓 commit 看起來像一個明確的操作。
例如:
1 | git commit -m "Fix login redirect after session expired" |
如果是中文也可以:
1 | git commit -m "修正登入過期後的導向流程" |
重點不是一定要英文或中文,而是要讓訊息本身清楚。
不要只寫結果,也可以補上原因
有些變更只看標題就足夠,但有些變更背後會有原因。
例如:
1 | git commit -m "Change retry count from 1 to 3" |
這句話只說明了「改了什麼」,但沒有說明「為什麼」。
如果補成:
1 | git commit -m "Increase API retry count to reduce transient failures" |
讀起來就會更清楚:這次調整是為了降低短暫網路錯誤造成的失敗率。
如果內容比較複雜,也可以用多行 commit message:
1 | git commit |
然後在編輯器裡寫:
1 | Increase API retry count |
第一行簡短描述,下面再補充背景。
每次 Commit 盡量只做一件事
commit message 寫不好,有時候不是文字問題,而是一次 commit 塞了太多東西。
例如同一個 commit 同時包含:
- 修登入 bug
- 調整按鈕樣式
- 改資料表欄位
- 順手整理 README
這種情況下,不管 message 怎麼寫都很難清楚。
比較好的做法是把變更拆開:
1 | git commit -m "Fix login redirect after session expired" |
這樣未來要查問題、還原變更或 code review,都會輕鬆很多。
可以參考的格式
如果團隊沒有特別規範,我覺得可以先用簡單格式就好:
1 | 動詞 + 變更對象 + 目的或結果 |
例如:
1 | Fix login redirect after session expired |
中文也可以:
1 | 修正登入過期後的導向流程 |
格式不用一開始就追求完美,先做到「看得懂」比什麼都重要。
結語
commit message 看起來只是小事,但它其實會影響專案的可維護性。
寫得清楚一點,未來在追 bug、看歷史、整理 release note 的時候,都會省下不少時間。
我的原則很簡單:
- 不只寫
fix、update這種模糊字眼。 - 一個 commit 盡量只處理一件事。
- 讓未來的自己看得懂當時為什麼這樣改。
工程很多時候不是只把功能做出來,而是讓後面的人能接得下去。
如果您喜歡我寫的文章,幫我按個5下讚吧!感謝您的鼓勵和支持!