Git Commit message

介绍 Git Commit 规范,推荐 Git Commit 插件,提出更适合 Hugo 的 type

玩笑

零分的 Commit message:

1
2
3
4
5
fix(胃袋): 修复肚子越吃越饱的 bug

进食不会增加饱食度,所有人都有机会变成大胃袋。

Closes #114514

满分的 Commit message:

1
🎉

我说 emoji 大于一切了,有没有懂的。

Git Commit 规范

网上关于 Git Commit 规范的文章很多,这里就简单摘抄一下作为备忘录吧。

Commit message 格式

1
2
3
4
5
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

Commit message 包含三个部分,分别是 Header、Body 和 Footer,其中 Header 是必需的,后两者是可选的。

Header 又包含三个部分,分别是 type、scope 和 subject,其中 scope 是可选的。

type 用于说明 commit 的类型,可以使用下面这些。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
init:       项目初始化
feat:       添加新特性
fix:        修复 bug
docs:       仅仅修改文档
style:      仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑
refactor:   代码重构,没有加新功能或者修复 bug
perf:       优化相关,比如提升性能、体验
test:       增加测试用例
build:      依赖相关的内容
ci:         ci 配置相关 例如对 k8s,docker 的配置文件的修改
chore:      改变构建流程、或者增加依赖库、工具等
revert:     回滚到上一个版本

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

subject 是对本次 commit 的简短描述,不超过50个字符。以动词开头,使用第一人称现在时,结尾不加句号。

Body

Body 部分是对本次 commit 的详细描述,可以分成多行。与 subject 一样使用第一人称现在时,但结尾可以正常加句号。Body 应该说明代码变动的动机,以及与以前行为的对比。

Footer 部分只用于两种情况。

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

关闭 Issue:如果当前 commit 针对某个 issue,那么可以在 Footer 部分关闭这个 issue ,当然也可以一次关闭多个 issue 。

Git Commit 插件

VSCode 推荐安装 git-commit-plugin ,这个插件会在提交信息上方增加一个小按钮,点击之后可以跟随指示一步步填写 commit message,比较有交互性。而且这个插件的模板还自带 emoji,大幅提高了 Commit message 的可读性(并非如此)。对了,emoji 和 type 之间其实有一个空格哦。

JetBrains 家的 IDE 则可以尝试 Git Commit Message Helper,这个插件可以在设置里自定义提交模板,为了统一,我会把提交模板设置得和 git-commit-plugin 一样。使用时,同样是点击提交信息上方的按钮,不过这个插件不是一步步来的,是直接把提交信息拆成了多个输入框,更加直观。

JetBrains 的插件还有 AI 功能,不过我不是很喜欢 AI 帮我写 Commit message,就没有试过。

更适合 Hugo 的 type

写了几篇文章,提交过几次之后,我发现好像所有文章相关的提交都只能塞进 docs 类型里,而有一些类型则几乎用不到,这让我萌生了修改 type 的想法。

Git 本身对于 Commit message 没有什么要求,我打算继续使用上文提到的 Commit message 格式,仅将 type 修改成更适合 Hugo 的样子。

新的 type

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
init:       站点初始化
feat:       添加新功能,比如图片处理和短代码
fix:        修复 bug,往往随 feat 出现
docs:       修改 READEME 或 LICENSE 等非网站内容文档
style:      修改代码格式或修改文章模板
refactor:   代码重构,没有加新功能或者修复 bug
perf:       优化相关,比如加快图片和字体加载速度
test:       增加测试用例,比如准备一篇不发布的文章测试短代码
build:      依赖与构建,比如升级 Hugo 和主题版本
ci:         ci 配置相关,比如 GitHub Actions 配置
chore:      改变构建流程、或者增加依赖库、工具等
revert:     回滚到上一个版本
post:       新增或发布文章
modify:     修改已有文章
remove:     删除文章

配套的 emoji

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
🎉 init
✨ feat
🐞 fix
📃 docs
🌈 style
🦄 refactor
🎈 perf
🧪 test
🔧 build
🐎 ci
🐳 chore
↩ revert
✒️ post
📌 modify
🗑️ remove

感觉图钉 emoji 配 modify 不是特别搭,但也没什么更好的选择了。

示例

1
2
3
✒️ post(tech): Git Commit message

介绍 Git Commit 规范,推荐 Git Commit 插件,提出更适合 Hugo 的 type

scope 用 categories ,subject 用 title ,body 用 description,都是 Frontmatter 里有的。

参考文献

使用 Hugo 构建
主题 Stack 由 Jimmy 设计