Skip to content

Latest commit

 

History

History
144 lines (94 loc) · 6.3 KB

commit-message.md

File metadata and controls

144 lines (94 loc) · 6.3 KB

commit-message

English | 简体中文

返回 WayPoint

根据当前 Git 仓库的真实改动 (暂存区, 未暂存的改动与未跟踪文件), 生成符合 Conventional Commits 规范的简体中文提交消息, 再按你的意图提交, 或提交后推送.

适用场景

  • 写完代码, 需要一条格式规范, 与改动内容一致的提交消息.
  • 让 Claude 完成任务后, 顺手把改动提交或推送.

以下场景不会使用本技能: 解释或审查已有的提交, 修改历史提交的消息 (amend, reword), 编写 PR 描述或 CHANGELOG, 查询 Git 历史, 以及 rebase, merge, cherry-pick 等其它 Git 操作.

触发方式

自然语言: 直接提出需求即可, 例如:

  • "帮我写个提交消息", "write a commit message"
  • "commit 一下", "帮我提交"
  • "提交并推送", "commit and push"

斜杠命令: /waypoint:commit-message [额外要求]. 额外要求优先于技能自己的判断, 例如:

  • /waypoint:commit-message fix: 指定 type 为 fix.
  • /waypoint:commit-message 强调这次是性能优化: 在消息中突出性能优化.

使用流程

  1. 检查仓库状态.
    • 当前目录不是 Git 仓库: 提示你先使用 /waypoint:repo-init 初始化, 然后结束.
    • 存在冲突, 或正在变基: 提示你先解决, 不生成消息.
    • 正在合并或 cherry-pick: Git 已准备好默认消息, 本技能不生成消息.
    • 正在撤销提交 (git revert --no-commit): 照常生成 revert 类型的消息.
  2. 列出改动, 包括未跟踪的新文件. 没有任何改动时回复 "当前没有可提交的更改".
  3. 确定纳入范围, 规则见下一节.
  4. 读取改动内容并生成消息. 改动很大时先看统计概况; lock 文件, 生成文件与二进制文件只按统计信息概括.
  5. 展示消息, 确定后续动作. 你事先说明了意图时直接执行; 否则展示消息后请你选择 A 或 B.
  6. 提交或推送, 完成后报告提交的短哈希与推送到的远程分支.

纳入范围

情况 处理方式
本会话中 Claude 改过文件, 工作区还有其它改动 先询问是否一起纳入: 全部纳入, 只含本会话改动, 或由你指定部分文件
本会话中 Claude 改过文件, 且只有这些改动 纳入这些文件
Claude 没有改过文件, 有暂存内容 只纳入暂存内容, 视为你已手动挑选
Claude 没有改过文件, 没有暂存内容 纳入全部改动, 包括未跟踪文件

询问纳入范围发生在生成消息之前. 无论你说的是 "生成提交消息", "提交" 还是 "提交并推送", 都会先完成这一步.

消息格式

type(scope): 主题

- 要点一
- 要点二

整体描述
  • type 取自 feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert.
  • scope 可选, 能明确归属时填写, 并优先沿用仓库历史中已有的写法.
  • 主题 一行概括本次改动, 句尾不加标点.
  • 要点 逐条列出具体改动, 每条都能对应到真实的改动.
  • 整体描述 一句话说明意图或影响, 不复述要点. 看不出动机时写影响, 不臆测.
  • 破坏性变更 在 type 或 scope 后加 !, 例如 feat(api)!: 移除旧版登录接口, 并在整体描述中点明影响.
  • 标点 使用英文 (ASCII) 标点, 标点后跟一个空格, 完整规则见 punctuation.md.
  • 严禁署名. 不附加 Co-Authored-By, Generated with 等任何署名或协作者信息. 即使你要求添加, 本技能也不会添加.

示例

只要求生成消息

你说 "帮我写个提交消息" 时, 回复如下. 回复 A 提交, 回复 B 提交并推送, 其它回复不会提交:

```
feat(parser): 支持多行注释

- 在词法分析中识别 /* */ 多行注释
- 为多行注释补充单元测试

避免多行注释被误判为语法错误.
```

---

[如何处理?]

A. 提交

B. 提交并推送

事先说明意图

你说 "帮我提交并推送" 时, 不再询问, 展示消息后直接执行, 并在最后报告结果, 例如 "已提交 a1b2c3d, 已推送到 origin/feat/parser".

工作区还有其它改动

Claude 在本会话中改了 src/parser.js, 而你另外改了 README.md. 生成消息前, Claude 会先列出 README.md, 询问是否一起纳入.

当前目录不是 Git 仓库

回复会提示你先运行 /waypoint:repo-init 初始化仓库, 不会自行执行 git init.

提交与推送的安全措施

  • 按具体路径暂存, 不使用 git add -A 或 git add ..
  • 纳入的文件中有疑似密钥或凭据 (如 .env, *.pem, *.key) 时, 先警告并询问是否排除.
  • 不使用 --no-verify, --amend, --trailer, --signoff, 除非你明确要求 (署名类 trailer 始终不会添加).
  • Git hook 执行失败时报告输出并停下, 不绕过也不重试.
  • 提交后核对提交消息与展示的内容一致.
  • 推送时:
    • 分支已有上游: 直接推送.
    • 没有上游且只有一个远程: 推送并建立上游.
    • 有多个远程: 先询问推送目标.
    • 从不强制推送; 推送被拒绝时如实报告原因.

常见问题

为什么我的请求没有触发本技能?

很可能还装着其它生成提交消息的技能, Claude 选了另一个. 请停用它们, 或者直接使用 /waypoint:commit-message.

为什么消息里没有我没暂存的改动?

Claude 在本会话中没有改过文件, 而你暂存了一部分内容时, 本技能认为你已手动挑选, 只按暂存内容生成消息.

能生成英文提交消息吗?

不能. 本技能固定生成简体中文消息.

我想在提交里保留署名怎么办?

本技能不会添加任何署名. 需要的话, 请在提交后自行修改, 例如执行 git commit --amend.

已知限制

  • 提交消息固定使用简体中文.
  • 合并或 cherry-pick 进行中时不生成消息, 请使用 Git 准备的默认消息.