關於Git commit

git commit 的重要性

當你學會使用git,並在GitHub上創建了本身的Repositories時。git

嗯。能夠push本身的代碼了,一頓github

  1. git pull origin master
  2. git add .
  3. git commit -m"balabala"
  4. git push origin master

看到100%以後開心極了。幾個月後看到以下npm

請問上傳的註冊頁面在哪裏呢???想必你也內心充滿了疑慮,我到底放在哪一個裏面的??

因而可知git add和git commit並非很簡單的一次所有完成的json

正確的使用git add 和 git commit

當你每次push的時候,必定是更新了一些代碼,完善了一些功能。markdown

例如:架構

1. 註冊功能
2. 登陸功能
3. 完善了README
複製代碼

那麼該如何的push此次代碼呢??框架

  1. 提交註冊功能的功能代碼
git add src/register
    git commit -m"add register function"
複製代碼
  1. 提交登陸功能的代碼
git add src/login
    git commit -m"add login function"
複製代碼
  1. 提交完善的README
git add READM.md
    git commit -m"modify README"
複製代碼

作完以上以後,你就能夠正常的工具

git push origin mater
複製代碼

固然,這樣只是一個簡單push測試

進一步的規範你的git commit

你覺得作到上面這些你就能夠完成規範的git commit 了嗎??優化

太天真你,通常規範的commit須要由三部分構成

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
複製代碼

其中,Header 是必需的,Body 和 Footer 能夠省略。

不論是哪個部分,任何一行都不得超過72個字符(或100個字符)。這是爲了不自動換行影響美觀。

1.Header

Head這部分只有一行,可是包括三個部分

< type >(必需)< scope >(可選)< subject >(必需)

(1) < type >

type用來講明commit的類別,也就是說別人看了你的type就知道你此次push的性質是什麼,只容許有如下幾種標識

  • init: 初始化項目,每每用於倉庫剛剛創建,建好項目框架以後的一次push
  • feat: 新功能(feature)
  • docs: 文檔的提交(document)
  • fix: 修補bug
  • style: 格式的改動(不影響代碼運行的變更,每每是規範了代碼的格式)
  • refactor: 重構(既不增長新功能,也不改任何的bug)
  • test: 增長測試
  • chore: 構建過程或輔助工具的變更
  • opt: 優化和改善,好比彈窗進行確認提示等相關的,不會改動邏輯和具體功能等
  • other: 用於難以分類的類別(不建議使用,但一些如刪除沒必要要的文件,更新.ignore之類的可使用)

      若是type爲feat和fix,則該 commit 將確定出如今 Change log 之中。其餘狀況(docs、chore、style、refactor、test)由你決定,要不要放入 Change log,建議是不要。

(2) < scope >

scope用於說明commit的影響範圍,好比數據層,控制層,視圖層等

      (可選)類型後面能夠加上括號,括號內填寫主要變更的範圍,好比按功能模塊分,某模塊;或按項目三層架構模式分,分數據 層、控制層之類的。

#:表示模塊
#student --> 表示 學生模塊 (具體的模塊開頭字母小寫,駝峯命名)
#ALL --> 表示 全部模塊 (特殊含義如ALL表全部,MOST表大部分,用大寫字母表示)
#MOST --> 表示 大部分模塊
複製代碼

e.g. feat(#student): 新增添加學生的功能 —— 表示student模塊新增功能,功能是添加學生

(3)< subject >

subject是 commit 目的的簡短描述,不超過50個字符。

- 以動詞開頭,使用第一人稱如今時,好比change,而不是changed或changes
- 第一個字母小寫
- 結尾不加句號(.)
複製代碼

2. Body

body部分是對本次commit的詳細描述,能夠分紅多行進行描述能夠分紅多行,正文在 72 個字符處換行。

使用正文解釋是什麼(what)和爲何(why),而不是如何作,以及與之前行爲的對比。

因而能夠這樣寫:

balabala : balabala

what:
balabala

why:
balabala
複製代碼

3. Footer

Footer只用於兩種狀況

(1)不兼容變更

若是當前代碼與上一個版本不兼容,則 Footer 部分以BREAKING CHANGE開頭,後面是對變更的描述、以及變更理由和遷移方法。

BREAKING CHANGE: isolate scope bindings definition has changed.

To migrate the code follow the example below:

Before:

scope: {
  myAttr: 'attribute',
}

After:

scope: {
  myAttr: '@',
}

The removed `inject` wasn't generaly useful for directives so there should be no code using it.
複製代碼

(2)關閉 Issue

若是當前 commit 針對某個issue,那麼能夠在 Footer 部分關閉這個 issue 。

Closes #234
複製代碼

也能夠一次關閉多個 issue 。

Closes #123, #245, #992
複製代碼

4. Revert

還有一種特殊狀況,若是當前 commit 用於撤銷之前的 commit,則必須以revert:開頭,後面跟着被撤銷 Commit 的 Header。

revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
複製代碼

Body部分的格式是固定的,必須寫成This reverts commit <hash>.,其中的hash是被撤銷 commit 的 SHA 標識符。

若是當前 commit 與被撤銷的 commit,在同一個發佈(release)裏面,那麼它們都不會出如今 Change log 裏面。若是二者在不一樣的發佈,那麼當前 commit,會出如今 Change log 的Reverts小標題下面。

幾個優秀的撰寫合格的commit的工具

1. Commitizen

Commitizen是一個撰寫合格 Commit message 的工具。

安裝命令以下。

$ npm install -g commitizen
複製代碼

而後,在項目目錄裏,運行下面的命令,使其支持 Angular 的 Commit message 格式。

$ commitizen init cz-conventional-changelog --save --save-exact
複製代碼

之後,凡是用到git commit命令,一概改成使用git cz。這時,就會出現選項,用來生成符合格式的 Commit message。

2. validate-commit-msg

validate-commit-msg 用於檢查 Node 項目的 Commit message 是否符合格式。

它的安裝是手動的。首先,拷貝下面這個JS文件,放入你的代碼庫。文件名能夠取爲validate-commit-msg.js。

接着,把這個腳本加入 Git 的 hook。下面是在package.json裏面使用 ghooks,把這個腳本加爲commit-msg時運行.

"config": {
  "ghooks": {
    "commit-msg": "./validate-commit-msg.js"
  }
}
複製代碼

而後,每次git commit的時候,這個腳本就會自動檢查 Commit message 是否合格。若是不合格,就會報錯。

$ git add -A 
$ git commit -m "edit markdown" 
INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" ! was: edit markdown
複製代碼

3. conventional-changelog

若是你的全部 Commit 都符合 Angular 格式,那麼發佈新版本時, Change log 就能夠用腳本自動生成。

生成的文檔包括如下三個部分。

- New features
- Bug fixes
- Breaking changes.
複製代碼

每一個部分都會羅列相關的 commit ,而且有指向這些commit的連接。固然,生成的文檔容許手動修改,因此發佈前,你還能夠添加其餘內容。

conventional-changelog 就是生成 Change log 的工具,運行下面的命令便可。

$ npm install -g conventional-changelog
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -w
複製代碼

上面命令不會覆蓋之前的 Change log,只會在CHANGELOG.md的頭部加上自從上次發佈以來的變更。

若是你想生成全部發布的 Change log,要改成運行下面的命令。

$ conventional-changelog -p angular -i CHANGELOG.md -w -r 0
複製代碼

爲了方便使用,能夠將其寫入package.json的scripts字段。

{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
  }
}
複製代碼

之後,直接運行下面的命令便可。

$ npm run changelog
複製代碼

(完)

以上內容僅表明做者本身的我的觀點,歡迎廣大專業人士提出建議

Thank You!!

相關文章
相關標籤/搜索