1. 1. commit message 格式
    1. 1.1. commit message type
    2. 1.2. 自动生成符合规范的 message
  2. 2. 校验 commit message
    1. 2.1. commitlint
    2. 2.2. husky
  3. 3. 生成 changelog
  4. 4. 资源链接
Table of Contents ▼

写出优雅的 git commit message

commit message 格式

为什么我们每次提交都要写 commit message,不写行不行。git 的本职在于版本管理,“管理”这两个字无论衍生出多少技能,终究脱离不了增、删、改、查,其中是基础。所以当你哪一天需要查找之前某次提交时,commit message 就不像你在 commit 时随手一写那样无足轻重了,你想处乱不惊,游刃有余必须有它。

commit message 我们使用 Angular 的规范,格式如下:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

headerbody, footer 三部分组成,其中 header 是必须提供的(同时也是我们最关注的);bodyfooter 可不填;简单说一下三部分的职能:

  • header: 简要说明修改了什么
  • body: 说明为何作出修改,修改前和修改后的差异
  • footer: Breaking Changes,以及此次更新对应的 issues

完整的说明和解释请参考 Angular 提供的文档

commit message type

合理的 type 非常方便做日后的回溯和查找,type 有且仅有如下七类:

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
  • refactor: A code change that neither fixes a bug nor adds a feature
  • perf: A code change that improves performance
  • test: Adding missing or correcting existing tests
  • chore: Changes to the build process or auxiliary tools and libraries such as documentation generation

自动生成符合规范的 message

为了提高效率和降低犯错概率,使用自动化工具来帮助我们生成 commit message,具体设置如下:

安装:

npm install -D commitizen cz-conventional-changelog

其中,commitizen 为我们提供了命令行工具,它提供了 git cz 来代替 git commit
cz-conventional-changelog 则作为 commitizen 的一个 adapter,它提供了标准的 angular 规范。

编辑 package.json

"script": {
  ...
},
"config": {
  "commitizen": {
    "path": "node_modules/cz-conventional-changelog"
  }
}

现在运行 git cz 试试:

校验 commit message

对于不符规范的 commit message,我们拒绝其提交。那自然用到 husky,而具体的校验交给 commitlint。具体设置如下:

commitlint

安装:

npm install -D @commitlint/cli @commitlint/config-conventional

项目根目录创建 .commitlintrc.js,文件内容如下:

module.exports = {
  extends: ['@commitlint/config-conventional'],
};

husky

安装:

npm install -D husky

编辑 package.json

"husky": {
  "hooks": {
    "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
  }
}

生成 changelog

按照规范来,生成 changelog 也自然顺理成章:

npm i --save-dev standard-version

修改 package.json

{
  "scripts": {
    "release": "standard-version"
  }
}

运行 npm run release,你会发现自动帮你生成好了就 CHANGELOG.md,并且打好 tag。具体如下:

  1. bumps the version in metadata files (package.json, composer.json, etc).
  2. uses conventional-changelog to update CHANGELOG.md
  3. commits package.json (et al.) and CHANGELOG.md
  4. tags a new release

如果不希望 standard-version 自动生成版本号,也可以自定义,使用 --release-as

npm run release -- --release-as 1.1.0

资源链接