📖
blog
  • README
  • JavaScript
    • 元素的宽高位置信息梳理
    • dom-align 源码浅析
    • Event Loop
    • 函数实参为对象时的陷阱
    • export 与 utils 方法书写规范
    • 手写 Promise 及相关代码理解
    • call,apply,bind 等函数的模拟实现
    • JavaScript继承
    • JavaScript 数据类型与类型判断
    • for..of 和 for..in 的区别
    • 写给自己看的 next 函数
    • JS 可选链与双问号
    • mouseenter 与 mouseover 事件的区别
    • Immutable相关知识
  • CSS
    • 不简单的 z-index
    • 两列布局,三列布局
    • CSS 居中方案整理
    • CSS 像素,设备像素,2倍图梳理
    • iconfont 的使用
  • Node JS
    • 实现简易的 express
  • React 核心知识点整理
    • 高阶组件
    • React 事件处理
    • React Hooks
    • React Context
  • React 状态管理
    • Redux 基础概念
    • Redux 中间件和异步操作
    • Redux Saga
    • Redux 只能有一个 store 对象嘛
  • React 开发实践
    • Ant Design Menu 组件的使用与深入
    • 讲讲吸顶效果与 react sticky
    • 基于 express,搭建 react 的开发环境
    • 通过 antd input 组件分析受控与非受控组件
    • DebounceClick 组件
    • react component Align 组件分析
    • React Portal 之事件冒泡
    • React Transition Group 源码浅析
    • React.cloneElement 父组件向子组件注入 props
    • 一次 Align 组件的问题记录
    • 如何知道子组件的类型
    • React Router 源码简单分析
    • React Redux 源码简单分析
  • Vue.js
    • Vue.js 概览
    • scoped 样式中的 deep
  • TypeScript 语法
    • 基础类型
    • 变量声明
    • 接口
    • 类
    • 函数
    • 泛型
    • 枚举
    • 类型推论
    • 类型兼容性
    • 高级类型
    • Symbol
    • 迭代器和生成器
    • 模块
    • 命名空间
    • JSX
  • 玩转 webpack
    • 第一章: webpack 与构建发展简史
    • 第二章:webpack基础用法
    • 第三章:webpack进阶用法
    • 第四章:编写可维护的 webpack 构建配置
    • 第五章:webpack构建速度和体积优化策略
    • 第六章:通过源代码掌握webpack打包原理
    • 第七章:编写Loader和插件
  • webpack 实践
    • 如何配置 output.library
  • 测试
    • 初识代码测试
    • Jest 中 如何测试 setTimeout
    • Jest Enzyme React 测试实践记录
  • WEB 开发,过往工作沉淀
    • Web安全(DVWA)
    • 内存泄露与事件移除的必要性
    • url to pdf api 与 服务部署踩坑记录
    • 前端调试指南
    • Markdown 转 email
    • github travis ci 自动部署
    • 浏览器缓存知识梳理
    • WEB 系统登录相关知识梳理
    • 将-Axios-请求参数和返回值进行格式化
    • source-map与源码调试
    • HTTPS
    • 使用 rollup 打造自己的 npm 包 (全流程)
    • father-build 是如何工作的
  • 书籍
    • 图解 HTTP 协议
    • 编写可维护的 JavaScript
    • 鸟哥的 Linux 私房菜
    • JavaScript Promise迷你书
  • Linux
    • vimtutor
    • CURL 使用指南
  • Nginx
    • 一次 nginx 分享
  • Git
    • Git Commit Message 须知
    • .gitignore 模板
    • git tag标签
  • 摄影
    • 摄影基础知识
    • 手机摄影从小白到大师
  • 翻译
    • log4js
    • log4js-node
    • 介绍GitLab上的CI/CD
    • 为GitLab Pages创建并调整GitLab CI/CD
    • 关于 rel=noopener
    • AngularJS 团队 Git 提交信息约定
    • JSON Schema
  • Lifehack
    • 20 个 Google 搜索 Tips 来高效使用 Google
    • 37 个高级 Google 搜索 Tips
Powered by GitBook
On this page
  • 前言
  • 1. commit message 规范
  • 2. Type 类型
  • 3. 如何书写多行 commit message
  • 4. 格式化输出 commit message
  • 4.1 筛选出有效信息
  • 5. Commitizen
  • 6. commit message with emoij
  • 7. commitlint
  • 8. 根据 commit 信息自动生成 CHANGELOG
  • 参考资料

Was this helpful?

  1. Git

Git Commit Message 须知

前言

一直以来自己的 commit message 都比较随意,之前有看到同事写: feat, chore等,同时还有相应的 emoij 表情,觉得很酷。便搜寻资料整理出此文,便于后续查询相关知识。

1. commit message 规范

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>


// 示例

docs(guide): updated fixed docs from Google Docs

Couple of typos fixed:
- indentation
- batchLogbatchLog -> batchLog
- start periodic checking
- missing brace

type 说明 commit 类型

scope: 可选,用于说明 commit 影响的范围

subject: commit 目的的简单描述

body: 可选,详细的 commit 描述

footer: 可选,关闭的 issues 或者不兼容的变更

2. Type 类型

  1. feat: 新功能

  2. fix: bug 修复

  3. docs: 文档(documentation)

  4. style: 代码格式化,添加分号等(不影响代码运行的变动)

  5. refactor: 重构(不是新增功能也不是修改bug)

  6. test: 增加或修改测试用例

  7. chore: 构建过程或者辅助工具的变动

  8. perf: 改善性能的修改

3. 如何书写多行 commit message

Git 每次提交代码,都需要写 Commit message,否则不允许提交

当 Commit message 存在多行时,可以执行: git commit, 此时会进入 vim 编辑器,允许输入多行文字。

4. 格式化输出 commit message

4.1 筛选出有效信息

通常我们使用 git log 查看 commit 信息,如下:

我们可以使用以下命令,得到更简洁的输出:

git log <last tag> HEAD --pretty=format:%s

另外,我们可以使用 --grep 得到包含某些单词的提交,比如 --grep feature 来得到属于 feature 类型的提交:

git log <last release> HEAD --pretty=format:%s --grep feat

通过与命令行的交互,生成符合 AngularJS 规范的 commit message

6. commit message with emoij

如何在 commit 信息中添加 emoij 表情,以及不同 emoij 表情所对应的 type?

7. commitlint

对 commit message 格式进行校验:

安装 @commitlint/cli, @commitlint/config-conventional npm install --save-dev @commitlint/config-conventional @commitlint/cli

使用 @commitlint/config-conventional 作为 lint 配置文件: echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js

安装好以上依赖之后,可以在本地测试是否生效 echo "test(xxx): add test" | npx commitlint

配置 husky:

"husky": {
  "hooks": {
    "pre-commit": "npm run test",
    "commit-msg": "commitlint -e $GIT_PARAMS"  // 或者 "commitlint -E HUSKY_GIT_PARAMS"
  }
},

这样就能对 commit 信息进行 lint 了。

8. 根据 commit 信息自动生成 CHANGELOG

conventional-changelog-cli 可以根据 commit 信息,通过以下命令自动生成 CHANGELOG.md 文件

npx conventional-changelog -p angular -i CHANGELOG.md -s -r 0

我们可以配置,当升级版本之后,自动生成 CHANGELOG.md

// package.json
{
  scripts: {
    "postversion": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md && git commit -m\"docs(changelog): $npm_package_version\" && git push --follow-tags"
  }
}

参考资料

Previous一次 nginx 分享Next.gitignore 模板

Last updated 4 years ago

Was this helpful?

git log
git log --pretty
git log --grep feature

5.

具体使用参考

参考 ,

阮一峰

gold-miner:

Commitizen
Commitizen 官方文档
git commit message emoji 使用指南
commitlint 文档
conventional-changelog-cli 文档
Commit message 和 Change log 编写指南
AngularJS 规范中文翻译
Augular 规范
Commitizen
git commit 时使用 Emoji ?
git commit message emoji 使用指南
An emoji guide for your commit messages
find github all emoij here