git_commit规范
主流 Git Commit 规范:约定式提交 (Conventional Commits)
约定式提交的格式非常简洁,结构如下:
1 | <type>(<scope>): <subject> |
对于大部分提交来说,通常只需要第一行(header
)就足够了。
1. Header
Header 部分只有一行,包括三个字段:type
(必需)、scope
(可选)和 subject
(必需)。
Type (类型)
type
用于说明 commit 的类别,只允许使用下面几个标识:
Type | 描述 |
---|---|
feat |
新功能 (feature) |
fix |
修复 Bug |
docs |
文档 (documentation) |
style |
格式 (不影响代码运行的变动,例如空格、格式化、缺少分号等) |
refactor |
重构 (既不是新增功能,也不是修改 bug 的代码变动) |
perf |
性能优化 (提升性能的代码更改) |
test |
测试 (增加或修改测试) |
chore |
构建过程或辅助工具的变动 (例如修改 vite.config.ts 、package.json 等) |
revert |
回滚 (如果当前 commit 用于撤销之前的 commit) |
Scope (范围) - 可选
scope
用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。在我的这个项目中,可以是:
stores
: 修改了zustand
的 storehooks
: 修改了自定义 Hooksetting
: 修改了右侧设置面板materials
: 修改或新增了物料组件dnd
: Drag and Drop (拖放) 相关逻辑deps
: 依赖项更新
Subject (主题)
subject
是 commit 目的的简短描述,不超过50个字符,结尾不加句号(.)。
2. Body (正文) - 可选
body
部分是对本次 commit 的详细描述,可以分成多行。应该说明代码变动的动机,以及与以前行为的对比。
3. Footer (页脚) - 可选
footer
部分只用于两种情况:
- 不兼容变动 (Breaking Change): 以
BREAKING CHANGE:
开头,后面是变动描述。 - 关闭 Issue:
Closes #123
,Closes #456
针对我项目的提交示例
现在,把我最近做的事情用约定式提交来表示一下:
为我添加注释后
Bash
1
git commit -m "docs(stores):为 component-config 和 components 两个 store 添加 JSDoc 注释"
- type:
docs
,因为只是添加文档/注释。 - scope:
stores
,因为修改的是 store 文件。 - subject: 清晰说明了做了什么。
- type:
修复了拖拽物料到表格中,高亮边框不显示的 bug
Bash
1
git commit -m "fix(materials): 修复 TableDev 组件在拖拽悬停时 canDrop 样式未生效的问题"
- type:
fix
- scope:
materials
(或dnd
) - subject: 描述修复的具体问题。
- type:
为 Button 组件增加一个新的“幽灵按钮”类型
Bash
1
git commit -m "feat(materials): 为 Button 组件增加 ghost 类型" -m "新的 ghost 按钮类型允许在有色背景上使用,增加了设计的灵活性。同时更新了 component-config 中的 setter 选项。"
- type:
feat
- body: (可选) 详细说明了变动的动机和内容。
- type:
如何在项目中落地?
要保证团队成员都遵循规范,可以引入工具来自动化检查。
- Commitizen: 一个命令行工具,可以交互式地引导我创建符合规范的 commit message。
- Husky: 可以让我在
git commit
或git push
等钩子(hooks)上运行脚本。 - commitlint: 配合 Husky 使用,在
commit-msg
钩子上检查我的 commit message 是否符合规范。
虽然我的 package.json
里现在没有这些工具,但在项目发展到一定阶段时,引入它们会是一个非常好的实践。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 云泥小窝!
评论