---
# System prepended metadata

title: 清楚的Commit Message
tags: [SeanDev, commit message, Git]

---

<style>
html, body, .ui-content {
    background-color: #333;
    color: #ddd;
}

.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
    color: #ddd;
}

.markdown-body h1,
.markdown-body h2 {
    border-bottom-color: #ffffff69;
}

.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
    color: #fff;
}

.markdown-body img {
    background-color: transparent;
}

.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
    color: white;
    border-left: 2px solid white;
}

.expand-toggle:hover, 
.expand-toggle:focus, 
.back-to-top:hover, 
.back-to-top:focus, 
.go-to-bottom:hover, 
.go-to-bottom:focus {
    color: white;
}


.ui-toc-dropdown {
    background-color: #333;
}

.ui-toc-label.btn {
    background-color: #191919;
    color: white;
}

.ui-toc-dropdown .nav>li>a:focus, 
.ui-toc-dropdown .nav>li>a:hover {
    color: white;
    border-left: 1px solid white;
}

.markdown-body blockquote {
    color: #bcbcbc;
}

.markdown-body table tr {
    background-color: #5f5f5f;
}

.markdown-body table tr:nth-child(2n) {
    background-color: #4f4f4f;
}

.markdown-body code,
.markdown-body tt {
    color: #eee;
    background-color: rgba(230, 230, 230, 0.36);
}

a,
.open-files-container li.selected a {
    color: #5EB7E0;
}
</style>
###### tags: `Git` `SeanDev` `commit message`

# 清楚的Commit Message

在做Commit提交時，除了將修改過後的內容提交上去外，還須為這次的commit做內容說明(Message)，記錄提交版本更動的摘要。

良好的message撰寫有以下優點：

1. 個人
- 幫助自己回顧開發紀錄，方便快速瀏覽。(git log)
- 可以過濾某些 commit（比如文檔改動），便於快速查找信息(git log —grep=”提交的訊息文字”)
- 易於暸解Commit的意圖
1. 團隊
- 易於暸解功能添加/修改的前因後果
- 易於追蹤功能的開發狀況
- 有助於Code Review的進行
- 掌握Bug的修改狀況
- 讓其他開發維護人員易於進入狀況
- 向同事、合作夥伴或利益相關者傳達變化的過程。

不良的message撰寫有以下缺點：

1. 個人
- 無法回顧開發紀錄，需耗費時間重新了解程式碼
- 不明的message訊息，容易讓人遺忘Commit的意圖
- 無法掌握及回顧功能的開發狀況，需耗費時間處理或重新來過
1. 團隊
- 不易暸解功能添加/修改的前因後果，需耗費時間了解
- 功能的開發狀況不清楚，需耗費時間確認
- Code Review可能會更花時間
- 其他開發維護人員需花更多時間來暸解

範例 1：

良好的Commit Message

> 新增登入功能畫面
> 
>建立帳號、密碼欄位UI
>建立登入按鈕UI
> 

不良的Commit Message

> 新增畫面

範例 2：

良好的Commit Message

> 添加小明登入後的權限
>
>小明在登入後希望有A功能
>因此新增特殊權限，讓小明登入時可使用A功能
>記得在Release版時移除
> 

不良的Commit Message

> 添加新的權限
> 

## 團隊開發 Message Convention 規範

Git Commit Message 格式

```jsx
<type>[optional scope]: <subject>

[optional body]

[optional footer(s)]
```

## Type(必填)

本次Commit的類型，若有重大功能調整，在Type後面加上!

- feat: 增加新功能或修改功能
- fix: 修改Bug
- docs: 文件修改或添加程式註解，不影響程式碼。
- style: coding style調整。如:空白、分號、空格、格式縮排等，不影響程式碼。
- refactor: 重構或優化程式碼，不影響程式功能。
- perf: 提升效能的修改。
- test: 新增或修改測試。
- chore: 建構程序或輔助工具的變動，不會修改程式碼和測試，如:環境建置或修改config等。

## Scope(選填)

本次Commit影響的範圍，例如資料庫、Component、Module、Router等等

## Subject(必填)

本次Commit的簡要說明描述。若無法做簡要說明，那可能是這個Commit太過複雜，需要考慮將提交部分內容抽離成另一個Commit。

- 描述內容第1個字詞以動詞為主。
- 描述文字字元不超過50字。
- 若為英文，第一個字母為大寫
- 在type: 空一格在寫Subject

## Body(選填)

本次 commit 的詳細描述，說明程式碼變動的項目與原因。

內容可包含這次Commit前產生的問題(為什麼做這件事？why)、commit做了什麼事(what)、用什麼方法做到(how)。

在使用fix、refactor、perf或feat修改功能時建議寫上詳細內容。

- 內容每 70個字元斷行
- 內容可以多解釋 what and why vs. how

## Footer(選填)

當前 commit 是針對某個 issue時或是pull request 號碼可在此添加

- 填入Issue編號，如#as123

### 範例

```jsx
feat: 新增登入功能畫面

在login.html裡
建立帳號、密碼欄位UI
建立登入按鈕UI
```

```jsx
feat: 添加小明登入後的權限

小明在登入後希望有A功能
因此新增特殊權限，讓小明登入時可使用A功能

在 Login() 裡多一個isSuperMember的判斷

記得在Release版時移除
```

```jsx
fix: 修改登入畫面跑版問題

使用手機瀏覽器開啟時，登入按鈕未顯示
因為css裡的content設定所造成
```

```jsx
fix: 修正小明登入後可使用A功能的問題

正式版本的情況下，小明登入後不可以使用A功能
除非他升級成VIP會員

在acid189版開發時添加一個特殊權限的管道
在relese版時忘了刪除

移除 Login() 裡的isSuperMember的判斷
```

### 參考來源

[Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/)

[AngularJS團隊 Message Convention 規範](https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#heading=h.greljkmo14y0)

[Git Log 進階使用](https://blog.csdn.net/ly890700/article/details/52787257)

[Commit訊息的重要性](https://docs.google.com/presentation/d/e/2PACX-1vRI5E0g1mDyXPcSuMG9nZ_XpBmnkk3SmloLt2Z5-ArEjFAM-GBtz9FXCT4Pxw0fq7hdbf0cId22DwxZ/pub?start=false&loop=false&delayms=60000&slide=id.g57075cf75d_0_151)

[如何寫一個Git Commit Message](https://blog.louie.lu/2017/03/21/%E5%A6%82%E4%BD%95%E5%AF%AB%E4%B8%80%E5%80%8B-git-commit-message/)

### 延伸閱讀

[Code Review](https://cythilya.github.io/2020/12/10/google-how-to-get-through-code-review/)