Skip to content

Git 提交规范:最佳实践清单

· 5 min

想要“历史好读、可回溯、能自动化”,从今天开始把提交消息写好看一点。别卷,先把 80% 的收益捡起来。

TL;DR:一屏清单#


写法规范(就这几条,够用了)#

1) Header:类型、作用域、主题#

示例

feat(auth): 支持邮箱验证码登录
fix(cart): 结算金额精度问题
refactor(checkout): 拆分支付步骤为独立组件
docs(readme): 补充部署说明

2) Body:讲人话,讲关键#

示例

修复在 iOS 16 下键盘弹出导致的布局抖动
方案:改为使用 SafeArea + scrollToFocusedInput
影响:老设备滚动条样式略有变化

3) Footer:机器能读的关键信息#

feat(api)!: 订单详情移除 legacy 字段
BREAKING CHANGE: /orders/:id 返回不再包含 legacyTotal,请使用 total

[!tip] 中文/英文都行,统一就好;类型用英文,内容可中文。


类型与作用域(别纠结,先统一)#

Do / Don’t


粒度与节奏(写多少合适)#

多次修正建议

Terminal window
git commit --fixup <sha>
git rebase -i --autosquash origin/main

团队工具最小闭环(5 分钟落地)#

1) 本地阻断:Commitlint + Husky#

Terminal window
pnpm add -D @commitlint/cli @commitlint/config-conventional husky
pnpm dlx husky init
module.exports = { extends: ['@commitlint/config-conventional'] };
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
pnpm commitlint --edit "$1"

2) 交互式提交(可选但真省心)#

Terminal window
pnpm add -D commitizen cz-git

package.json

{
"scripts": { "commit": "cz" },
"config": { "commitizen": { "path": "node_modules/cz-git" } }
}

现在用:

Terminal window
pnpm commit

3) CI 再验一次(防“跳钩子”)#

- name: Commitlint
run: |
pnpm install --frozen-lockfile
pnpm commitlint --from=origin/main --to=HEAD

协作流与合并策略#

Terminal window
git revert <sha>
# 合并提交用 -m 选择主线:git revert -m 1 <merge-sha>

Monorepo 小贴士#


自动生成 CHANGELOG 与发版(可选增强)#

Terminal window
pnpm add -D standard-version
pnpm release
git push --follow-tags origin main
Terminal window
pnpm add -D semantic-release @semantic-release/changelog @semantic-release/git \
@semantic-release/github @semantic-release/commit-analyzer @semantic-release/release-notes-generator

[!info] 规则映射


常见问题(快问快答)#


团队落地 Checklist#