--- title: 【Git】commit message 的寫法 date: 2019-03-21 is_modified: false disqus: cynthiahackmd categories: - "軟體開發 › 版本管控" tags: - "Git" --- {%hackmd @CynthiaChuang/Github-Page-Theme %} <br> 記錄一下,別人的 git commit 都怎麼寫的,我自己的寫法太放飛自我了,每次在翻閱歷史紀錄時都要盯著它看很久 Orz ... 之後 commit 如果沒有特殊要求(就是團隊已經定下的書寫規則),盡量就照這份來寫吧 >///< <!--more--> ## 必要元素 一個有效的 Git Commit Message 應包含三件事:_What、Why_ 以及 _How_ ### 做了什麼事情(What) 通常是 commit 的第一行,**簡述此次變更的內容、達成的目的**,例如:修了什麼 bug 或新增了什麼功能...之類的。這是 commit 最重要的一部分,通常大家只會看這個,所以必須直白地告訴其他開發者提交這個 commit 的目的,因此若是 commit 裡面包含多的目的,那麼你就應該分開提交。 ~~P.S. 還記得之前山姆大看到我的 commit 的臉黑的跟什麼一樣,因為我包了太多事情了 XD~~ 習慣上,我會為此次變更加上標籤,方便下次閱讀時快速了解這次變更的性質。 ### 為什麼要有變更(Why) 記錄變更的動機與原因是什麼了,例如此次改版原因或是 issue 編號之類的,方便之後追朔。 ### 使用什麼方法(How) 有需要特別補充的才記錄在訊息中,不用寫的太細節,那是程式碼註解或是程式碼本身該做的事情。 ## 書寫原則 基本上依照以下的格式來書寫 commit。 - **第一行(標題)** 這次變更概要(What) - **第二行** 留空 - **第三行** 這次變更的詳細內容與理由等(Why + How) ### 第一行 依照 commit 的類別,在開頭加上標籤,大概會長的像下面這樣,有人建議限制文字長度在 **50 字元**左右: ``` [標籤] 這次變更概要 ex. [fix] 修正文字大小 ``` <br> 標籤的部份常用的有: - **fix**:顧名思義,修bug用的 - **add**:新增檔案或功能 - **change**:功能或規格變更。類似 function 的 in/output 不變,但中間可能由於 API 更改導致實作方式變更...之類的。 - **refactor**:整理或重構程式碼 - **remove**:刪除檔案 - **revert**:取消變更 - **merge**:合併 branch - **update**:更新文件(非程式碼)、 db、 json、 md <br> 另外,這些是我看[這篇](https://github.com/oracle-design/guides/wiki/Git-commit-message-的寫法)有用到的: - **hotfix**:緊急嚴重的 bug 修正 - **disable**:拿掉某功能 - **upgrade**:版本更新 <br> 個人習慣標籤之前會再加上 branch 或 module 的識別標籤,方便進行功能辨識: ``` [branch/module][標籤] 這次變更概要 ex. [Portal][fix] 修正文字大小 ``` ### 第三行 這邊就是寫 Why + How 了,如果是修 issue,順便把 issue 號碼加上去(如果有的話);加功能的話,則會在這邊備註是哪份文件那一版所要增加的功能。 例如:```TT-1985 follow Common UI v4.2 修改文字大小``` 所以整筆 commit 會變成這樣: ``` [fix] 修正文字大小 TT-1985 follow Common UI v4.2 修改文字大小 ``` ## 參考資料 1. [Git commit message 的寫法|Github](https://github.com/oracle-design/guides/wiki/Git-commit-message-的寫法) 2. [撰寫有效的 Git Commit Message|Fourdesire Blog](http://blog.fourdesire.com/2018/07/03/%E6%92%B0%E5%AF%AB%E6%9C%89%E6%95%88%E7%9A%84-git-commit-message/) <br><br> > **本文作者**: 辛西亞.Cynthia > **本文連結**: [辛西亞的技能樹](https://cynthiachuang.github.io/Git-Commit-Message-Style) / [hackmd 版本](https://hackmd.io/@CynthiaChuang/Git-Commit-Message-Style) > **版權聲明**: 部落格中所有文章,均採用 [姓名標示-非商業性-相同方式分享 4.0 國際](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en) (CC BY-NC-SA 4.0) 許可協議。轉載請標明作者、連結與出處!