Git Commit 规范指南

Caret Up

前言

Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。

一般来说,Commit message 应该清晰明了,说明本次提交的目的。

目前,社区有多种 Commit message 的写法规范。其中 Angular 规范是目前使用最广的写法。前端框架 Angular.js 项目采用的就是该规范。

格式

每次提交,Commit message 都包括三个部分 header , body , footer

1
2
3
4
5
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

其中,header 是必须的,body 和 footer 可以省略

不管是哪部分,任何一行都不得超过72字符(或100个字符)。这是为了避免自动换行影响美观

Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。

type

用于说明 commit 的类别,约定了两个主要 type,以及五个特殊 type,并 扩充了其他 type。

主要

  • feat:新功能(feature)
  • fix:修补bug

特殊

  • docs:文档(documentation),只改动了文档部分
  • style: 格式(不影响代码运行的变动),例如去掉空格、改变缩进
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • test:添加测试或者修改现有测试
  • chore:构建过程或辅助工具的变动

扩充

  • build:改变构建流程,新增依赖库、工具、构造工具的或者外部依赖的改动,例如webpack,npm
  • perf:提高性能的改动
  • ci:自动化流程配置修改、与CI(持续集成服务)有关的改动
  • revert:回滚到上一个版本,执行git revert打印的message
  1. 如果type为 featfix ,则该 commit 将肯定出现在 Change log 之中。
  2. 当一次改动包括 主要type 与 特殊type 时,统一采用 主要type。

scope

scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

如果你的修改影响了不止一个scope,你可以使用*代替。 如果没有合适的范围,可以直接写提交内容

subject

subject 是 commit 目的的简短描述,不超过50个字符。

其他注意事项:

  • 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
  • 第一个字母小写
  • 结尾不加句号(.)

Body

Body 部分是对本次 commit 的详细描述,可以分为多行 主要描述 改动之前的情况修改动机 ,对于小的修改一般不作要求,但是重大需求、更新等必须添加 body 以作说明

其他注意事项:

  • 使用第一人称
  • 永远别忘了第2行是空行
  • 应该说明代码变动的动机,以及与以前行为的对比

Tooter 部分只用于以下两种情况:

不兼容变动(break changes)

如果当前代码与上一个版本不兼容,则 footer 部分以 BREAKING CHANGE 开头,后面是对变动的描述、以及变动理由和迁移方法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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.

关闭 Issue(affect issues)

如果当前 commit 针对某个issue,那么可以在 Footer 部分关闭这个 issue 。

1
Closes #234

示例

对 package.json 文件新增依赖库

1
chore(package.json): 新增依赖库

对代码进行重构

1
refactor(weChat.vue): 重构微信进件

分支与版本发布规范

main 为保护分支,不直接在 main 上进行代码修改和提交

开发从 main 分支上 checkout 一个 feature 分支进行开发或者 fix 分支进行 bug修复,功能测试完毕并且项目发布上线后,将 feature 分支合并到主干 main,并且打 tag 发布,最后删除开发分支。

  • 分支版本命名规则:分支类型 _ 分支发布时间 _ 分支功能。例如:feat_20201122_login
  • 分支类型包括:featfixrefactor 三种类型,即新功能开发、bug修复和代码重构
  • 时间使用年月日进行命名,不足2位补0
  • 分支功能命名使用snake case命名法,即下划线命名

工具

Idea 可用插件 Git Commit Template