提交 (Commit) 是做什么的?
提交是某人在压力下、在事故期间、一年后所读到的最小历史单元。请为这样的读者优化。
工作流程
- 提交前先查看:
git status、git diff --staged、git diff。绝不盲目提交。 - 检查是否有任何不可提交的内容:凭据、
.env文件、私钥、大型二进制文件、调试打印语句、注释掉的代码。如果发现,停止并告知用户。参见secrets-hygiene技能。 - 有选择地暂存。优先使用
git add <路径>而不是git add -A。每个提交只包含一个逻辑变更;如果变更混合了重构和功能,则拆分。 - 按照以下格式编写消息。
- 使用 heredoc 提交,这样多行正文才能在 shell 中存活:
git commit -m "$(cat <<'MSG'
feat(auth): 为管理控制台添加 OIDC 登录
用 Cognito 支持的 OIDC 替代了共享的基本认证密码,以便可以按用户撤销访问权限。会话 8 小时后过期。
Refs: PLAT-412
MSG
)"
- 用
git log -1 --stat确认。除非用户明确要求,绝不修改或强制推送。
消息格式
<类型>(<范围>): <祈使句摘要,≤72 字符,末尾无句号>
<为何存在此更改,而不是差异显示的内容——差异已经显示了那个>
<页脚:Refs/Closes 工单,BREAKING CHANGE: ...,Co-Authored-By>
类型:feat、fix、refactor、perf、test、docs、build、ci、chore、revert。
范围是所涉及的模块、服务或栈(api、terraform/vpc、ci)。当变更是全局性的时省略范围。
正文比摘要更重要。用两到四句话回答“为什么现在?”和“我们考虑了哪些方案?”。对于琐碎的更改,一行提交也可以。
示例
输入:修复了 S3 存储桶没有标签时的空指针异常
输出:fix(s3-inventory): 处理没有标签集的存储桶
输入:将 Terraform AWS 提供程序从 5.40 升级到 5.60,新的 Lambda 运行时属性需要此版本 输出:
build(terraform): 将 AWS 提供程序升级到 5.60
`aws_lambda_function.runtime = "python3.13"` 需要此版本。所有栈上的 `terraform plan` 没有资源差异。
当给定 $ARGUMENTS 时
将其视为用户给出的范围或摘要提示,但仍需检查差异并纠正它,如果它与实际更改不匹配。