规范Git代码提交信息
前言
Git 作为一个开发人员必不可少的工具,代码提交也是日常一个非常频繁的操作,如果你或你的团队目前对提交信息还没有一个规范或约束,那么你有必要看看本文的内容了。
为什么要规范提交信息
规范提交信息是有必要的,简单总结下几点好处:
- 让项目的维护或使用人员能了解提交的更改内容;
- 清晰的历史记录;
- 规范化的提交记录可用于自动生成修改日志(CHANGELOG.MD);
- 基于提交类型,触发构建和部署流程。
使用什么规范
Conventional Commits
(约定式提交规范),是目前使用最广泛的提交信息规范,其主要受AngularJS
规范的启发,下面是一个规范信息的结构:
<type>[scope - optional]: <subject>
|
|
//空一行
|
|
[body - optional]
|
|
//空一行
|
|
[footer(s) - optional]
|
规范详细说明
type:
必填,提交的类别,是以下类型中的一个:
feat:增加一个新功能
|
|
fix:修复bug
|
|
docs:只修改了文档
|
|
style:做了不影响代码含义的修改,空格、格式化、缺少分号等等
|
|
refactor:代码重构,既不是修复bug,也不是新功能的修改
|
|
perf:改进性能的代码
|
|
test:增加测试或更新已有的测试
|
|
chore:构建或辅助工具或依赖库的更新
|
scope:
选填,表示影响的范围、功能、模块。
subject:
必填,简单说明,不超过50个字。
body:
选填,用于填写更详细的描述。
footer(s):
选填,用于填关联issus
,或BREAK CHANGE
。BREAKING CHANGE
:必须是大写,表示引入了破坏性 API 变更,通常是一个大版本的改动,BREAKING CHANGE:
之后必须提供描述,下面一个包含破坏性变更的提交示例:
feat: allow provided config object to extend other configs
|
|
BREAKING CHANGE: `extends` key in config file is now used for extending other config files
|
更详细的说明请看约定式提交规范
如何约束规范
怎么确保每个提交都能符合规范呢,最好的方式就是通过工具来生成和校验,commitizen
是一个 NodeJS 命令行工具,通过交互的方式,生成符合规范的 Git Commit,界面如下:
安装 commitizen:
# 全局安装
|
|
npm install -g commitizen
|
|
# 或者本地安装
|
|
$ npm install --save-dev commitizen
|
|
# 安装适配器
|
|
npm install cz-conventional-changelog
|
配置 commitizen:
在配置文件packages.json
中指定使用哪种规范
...
|
|
"config": {
|
|
"commitizen": {
|
|
"path": "cz-conventional-changelog"
|
|
}
|
|
}
|
安装完成后可以使用git cz
来代替git commit
,然后根据提示一步步输入即可。
修改Git Commit
为了使CHANGELOG.MD
更能加直观看到每个版本的修改,我们尽量保证每次提交都是有意义的,但实际开发过程中,不可避免会提交了一些错误的commit message,下面介绍几个git
命令来修改commit
。
修改最后一次提交
git commit --amend
该命令会创建一个提交并覆盖上次提交,如果是因为写错或者不满意上次的提交信息,使用该命令就非常适合。
合并多条提交
git reset --soft [commitID]
如果你想合并最近几条提交信息的话,那么就需要使用上面的命令来操作,指定要撤销的 commitID,该命令会保留当前改动并撤销指定提交后的所有 commit 记录,如果不指定ID的话可以使用 HEAD~{num}
来选择最近{num}
条提交。
git reset --soft HEAD~2 #合并最近两条提交
|
|
git commit -m 'feat: add new feat'
|
|
# 带 --soft 参数的区别在于把改动内容添加到暂存区,相当于执行了git add。
|
git rebase -i
git rebase
的功能会更加强大,如果我想修改最近3条提交记录,执行:
git rebase -i HEAD~3
会出现如下编辑器界面(vim编辑器):
上面显示的是我最近3条提交信息 ,下面是命令说明:
p,pick = 使用提交
|
|
r,reword = 使用提交,但修改提交说明
|
|
e,edit = 使用提交,退出后使用git commit --amend 修改
|
|
s,squash = 使用提交,合并前一个提交
|
|
f,fixup = 和squash相同,但丢弃提交说明日志
|
|
d,drop = 删除提交,丢弃提交记录
|
https://huzizi.com/git-commit-standard/