优雅地提交 Git Commit Message

Why

如果在版本回退的时候看到一大段完全不知所云的 Commit,大概会是一种非常糟心的体验。而规范的提交后,只需要看标识符就可以明白提交的目的。

方便浏览

提供更多的信息,方便排查与回退

git log HEAD --pretty=format:%s

便于查找

过滤关键字,迅速定位

# 查找新增功能
git log HEAD --grep feat

Git Commit 规范

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

Header 仅有一行,包含三个字段

  • type(必需):用于说明 commit 的类别
  • scope(可选):用于说明 commit 影响的范围,比如数据层、控制层、视图层等,视项目不同而不同
  • subject(必需):commit 目的的简短描述
    • 首字母不大写
    • 末尾不要标点
    • 以动词开头,使用第一人称现在时,比如 change,而不是 changed 或 changes

type 只允许使用下面 7 个标识

  • feat:新功能(feature)
  • fix:修复 bug
  • docs:文档(documentation)
  • style: 格式(不影响代码逻辑)
  • refactor:重构(既不是新增功能,也不是修改 bug 的- 代码变动)
  • test:增加测试(单元测试、集成测试)
  • chore:构建过程或辅助工具的变动
  • revert:回滚到某一个版本

Body

Body 是对本次 commit 的详细描述,可分成多行。应说明代码变动的动机,以及与以前功能的对比。

该部分用于两种情况:

  • 不兼容的变动:与上一个版本不兼容,则 Footer 部分以 BREAKING CHANGE 开头
  • 关闭 Issue:commit 针对某个 issue,在 Footer 中可以写上 Closes #123

特殊情况 Revert

有一种特殊情况,如果当前 commit 用于撤销以前的 commit:

必须以 revert: 开头,后面跟着被撤销 commit 的 Header
Body 部分的格式是固定的,必须写成 This reverts commit <hash>.
hash 为被撤销 commit 的 SHA 标识符

好的格式

50-character subject line

72-character wrapped longer description. This should answer:

  • Why was this change necessary?
  • How does it address the problem?
  • Are there any side effects?

Include a link to the ticket, if any.

Add co-authors if you worked on this code with others:

Co-authored-by: Full Name email@example.com
Co-authored-by: Full Name email@example.com

Git 分支与版本发布规范

基本原则

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

日常开发

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

分支命名规范

分支类型_分支发布时间_分支功能。
比如:feature_20191221_git_commit

分支类型包括 feature、bugfix、refactor 三种类型,
时间使用年月日进行命名,不足 2 位补 0。
分支功能命名使用 snake case 命名法。

Tag

Tag 包括 3 位版本,前缀使用 v,比如 v0.1.13

Tag 命名规范

新功能开发使用第 2 位版本号,bug 修复使用第 3 位版本号

核心基础库可以在大版本发布前使用灰度版本号,即在版本后面加上后缀,用中划线分隔。alpha 或者 beta 后面加上次数,即第几次 alpha:

v2.0.0-alpha.1

v2.0.0-beta.2

版本正式发布前需要生成 changelog 文档,然后再发布上线。


规范没有绝对的好坏,只要适合团队和个人就行

好的习惯尽早养成,受益终身

Reference

AngularJS Commits

Conventional Commits

A Note About Git Commit Messages

Commit message 和 Change log 编写指南

5 Useful Tips For A Better Commit Message