git分支管理及git commit message规范

5,661 阅读3分钟

分支管理

manage-flow

如图所示: master分支只用于存放线上版本 线上紧急bug,使用hot-fix分支 开发在dev分支上,小的测试bug也可在dev分支修改。线上紧急修复bug也需合并到dev分支 开发复杂的新功能可新建分支dev-${devName}

Git Commit message 规范

使用Angular的Commit message 格式

commit message 格式

每个commit message 包括header,body和footer,各占一行,每行不超过100字符。其中header由type、scope和subject组成。header必须要写,header的scope是可选的。

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

Revert

如果commit用于撤销之前的commit,需以revert:开头,接着写被撤销的commit的header。body里要写:this reverts commit . ,hash为被撤销的commit的hash值。这种格式也可以由git revert命令自动生成。

Type

必须为下列之一:

  • feat:新功能(feature)
  • fix:修补bug
  • docs:文档修改
  • style: 不影响代码含义的修改(例如:white-space; 格式化等)
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • perf: 提升性能的修改
  • test:增加或修改测试
  • chore:构建流程或辅助工具的变动

Scope

scope用于说明commit修改的范围,比如数据层、控制层、视图层,route, component, utils, build等等。如果修改影响多处,可使用"*"。

Subject

Subject是对修改的简要说明:

  • 使用祈使语气,一般现在时。
  • 首字母小写
  • 句末不要使用句号

Body

使用祈使语气,一般现在时。另外,body需要包含修改的原因和与之前版本的区别。

Footer

任何Breaking changes的信息或者关闭issue的信息都可写在Footer. Breaking changes需要以 BREAKING CHANGE: 开头。

如下为我的2条提交记录:

commit 9fb447d73c637cfa128b57a84d95dc72bb14412b (HEAD -> master)
Author: zhongjx <amy_zhjx@163.com>
Date:   Wed Dec 26 18:22:53 2018 +0800

    refactor(*): 使用prettier格式化代码
    
    使用eslint+prettier取代之前的eslint+airbnb规范

commit a4a5e9259d5dd4f5f4d3d16fea3392df2a877ee1 (origin/master)
Author: zhongjx <amy_zhjx@163.com>
Date:   Tue Nov 20 09:49:27 2018 +0800

    chore: 添加commit msg格式要求

更多例子可以查看angular.js的commits

在webpack中配置使用

安装

npm i --save-dev @commitlint/cli @commitlint/config-conventional husky

husky是能够阻止不满足要求的git commit, git push或其他命令无法执行。 通过如下配置:

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

每次在提交时都会校验是否满足规定的commit msg方式。

standard version

Standard Version是一个能自动生成版本和CHANGELOG.md的npm包。

安装

安装依赖:

npm i --save-dev standard-version

在package.json中添加运行脚本:

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

执行npm run release会自动生成CHANGELOG.md,并生成一个commit记录和tag一个新的发布。

首次发布

只需运行

npm run release -- --first-release
// 或者
standard-version --first-release

这会生成一个发布tag,但不会在package.json中修改版本。

发布一个pre-release

使用--prerelease来生成预发布: 假设当前版本是1.0.0,且将要commit的代码为打补丁的修改。运行:

npm run release -- --prerelease

将生成版本号1.0.1-0。 如果想指定预发布版本名字可以通过--rerelease <name>。 例如:

npm run release -- --prerelease alpha

这个tag将是1.0.1-alpha.0

发布指定的类型

使用--release-as 加参数major或minor或patch可以取消自动生成版本号。 假设当前版本为1.0.0.运行

//  npm run script
npm run release -- --release-as minor
//  Or
npm run release -- --release-as 1.1.0

将生成版本号1.1.0,而不是自动生成的版本号1.0.1