
规范GIT代码提交信息&自动化版本管理
前言
git
作为一个开发人员必不可少的工具,代码提交也是日常一个非常频繁的操作,如果你或你的团队目前对提交信息还没有一个规范或约束,那么你有必要看看本文的内容了。
为什么要规范提交信息
首先规范提交信息肯定是有必要的,简单总结下几点好处:
- 让项目的维护或使用人员能了解提交了哪些更改
- 清晰的历史记录,可能某天自己就需要查到呢
- 规范的提交记录可用于自动生成修改日志(CHANGELOG.MD)
- 基于提交类型,触发构建和部署流程
使用什么规范
Conventional Commits
(约定式提交规范),是目前使用最广泛的提交信息规范,其主要受AngularJS规范的启发,下面是一个规范信息的结构:
1 | <type>[optional scope]: <subject> |
规范说明
type
提交的类别,必须是以下类型中的一个
1 | feat:增加一个新功能 |
scope
可选,表示影响的范围、功能、模块
subject
必填,简单说明,不超过50个字
body
选填,用于填写更详细的描述
footer
选填,用于填关联issus
,或BREAK CHANGE
BREAKING CHANGE
必须是大写,表示引入了破坏性 API 变更,通常是一个大版本的改动,BREAKING CHANGE:
之后必须提供描述,下面一个包含破坏性变更的提交示例
1 | feat: allow provided config object to extend other configs |
更详细的说明请看约定式提交规范
如何约束规范
怎么确保每个提交都能符合规范呢,最好的方式就是通过工具来生成和校验,commitizen
是一个nodejs命令行工具,通过交互的方式,生成符合规范的git commit,界面如下:
开始安装:
1 | # 全局安装 |
packages.json
在配置文件中指定使用哪种规范
1 | ... |
安装完成后可以使用git cz
来代替git commit
,然后根据提示一步步输入即可
格式校验commitlint
可能你不想每次都通过交互界面来生成,还是想使用git commit -m 'message'
,那么为了确保信息的正确性,可以结合husky
对提交的信息进行格式验证
安装依赖
1 | npm install --save-dev @commitlint/{config-conventional,cli} |
添加 commitlint.config.js
文件到项目
1 | echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js |
#git提交验证
“husky”: {
“hooks”: {
“commit-msg”: “commitlint -E HUSKY_GIT_PARAMS”
}
},
1 |
|
1 |
|
添加npm script
1 | { |
执行:
1 | # npm run script |
或者你想指定发行版本号:
1 | #指定类型 patch/minor/marjor |
生命周期
prerelease
:所有脚本执行之前prebump
/postbump
: 修改版本号之前和之后prechangelog
/postchangelog
:生成changelog和生成changelog之后pretag
/postag
:生成tag标签和之后
standard-version
本身只针对本地,并没有push
才操作,我们可以在最后一步生成tag后,执行push操作,在paceage.json
中添加
1 | "standard-version": { |
还有更多配置功能自行查阅 官方文档
其它类似工具
除了standard-version
,还有其它类似的工具,有兴趣可以去了解下
修改Git Commit
为了使CHANGELOG.MD
更能加直观看到每个版本的修改,我们尽量保证每次提交都是有意义的,但实际开发过程中,不可避免会提交了一些错误的commit message,下面介绍几个git
命令来修改commit
1 修改最后一次提交
git commit --amend
该命令会创建一个提交并覆盖上次提交,如果是因为写错或者不满意上次的提交信息,使用该命令就非常适合。
2 合并多条提交
git reset --soft [commitID]
如果你想合并最近几条提交信息的话,那么就需要使用上面的命令来操作,指定要撤销的ccommitId,该命令会保留当前改动并撤销指定提交后的所有commit记录,如果不指定ID的话可以使用HEAD~{num}
来选择最近{num}
条提交
1 | git reset --soft HEAD~2 #合并最近两条提交 |
带
--soft
参数的区别在于把改动内容添加到暂存区 相当于执行了git add .
git rebase -i
git rebase
的功能会更加强大,如果我想修改最近3条提交记录,执行
1 | git rebase -i HEAD~3 |
会出现如下编辑器界面(vim编辑器):
上面显示的是我最近3条提交信息 ,下面是命令说明,
修改方式就是将commit信息前的pick
改为你需要的命令,然后退出:wq
保存
下面是常用的命令说明:
1 | p,pick = 使用提交 |
最后
文本主要介绍了如何规范git commit
和自动语义化版本管理,以及如何修改git commit
,遵循一个规范其实没比之前随意填写信息增加多少工作量,但依赖规范却可以实现更多提升效率的事情。