关于 ce-commit
ce-commit 是一项用于将当前工作区内容提交到本地 Git 的技能,面向需要规范整理提交的开发者。它强调明确选择文件、遵循项目提交惯例并检查提交后的状态,不负责推送或创建 PR。
主要功能
- 01检查 Git 状态、差异、分支和历史
- 02必要时创建功能分支
- 03将不同改动拆分为多个提交
- 04仅暂存指定文件并明确提交路径
- 05确认提交结果与工作区状态
适用场景
- 01完成改动后本地提交且不推送
- 02避免将无关或预暂存文件带入提交
- 03将明显不同的改动分别提交
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ everyinc/ compound-engineering-plugin --skill ce-commit安装后在 Claude Code 中输入/ce-commit确认已加载。
详细介绍
Git 提交
根据当前工作树创建精心编写的本地提交。不要推送或创建 PR——完整的发布流程请使用 ce-commit-push-pr。
完成条件: 每项逻辑变更都已提交,且明确指定文件列表,并使用说明变更结果的提交消息;git status 显示这些变更已清除。停止条件: 工作树干净(没有待提交内容)。
上下文
使用每条命令收集上下文,每条命令都作为独立的 shell 工具调用(仅程序和参数)。不要使用 ;、&&、||、管道、$(...) 或重定向来拼接命令——这些语法在 Windows PowerShell 下会失败。非零退出状态是需要解读的正常状态,不是需要抑制的错误。
| 命令 | 用途 | 非零 / 空结果表示 |
|---|---|---|
git status | 工作树状态 | 当前目录不是 Git 仓库——停止 |
git diff HEAD | 未提交的变更 | 尚未创建初始提交的空仓库 |
git branch --show-current | 当前分支 | 为空 = 分离 HEAD |
git log --oneline -10 | 最近的提交消息风格 | 尚未创建初始提交的空仓库——没有历史记录 |
git rev-parse --abbrev-ref origin/HEAD | 远程默认分支 | 没有 origin/HEAD / HEAD 为空——尝试运行 gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name',否则使用 main |
将其视为快照。如果期间可能发生任何变化,请在提交前立即重新读取分支和暂存文件集合。
默认分支名称: 从 origin/HEAD 中移除开头的 origin/(因此 origin/trunk → trunk)。所有“当前是否位于默认分支?”检查都使用这个不带前缀的名称——绝不要与 origin/<name> 比较。
工作流
-
收集 — 运行上方所有 Context 命令(每个命令单独调用 shell),然后继续。
-
没有内容需要提交 — 如果
git status显示没有已暂存、已修改或未跟踪的文件,报告这一情况并停止。不要仅用git diff HEAD判断工作区是否干净(它会漏掉未跟踪文件)。 -
先创建分支 — 如果 HEAD 分离,或当前位于默认分支(
main/master/ 上方提到的裸默认名称),根据更改内容创建功能分支(git checkout -b <name>),然后重新读取git branch --show-current。不要询问——即使只提交,也不能让工作仅留在分离的 HEAD 或默认分支上。如果派生出的名称已存在,请选择一个不冲突的后缀。 -
提交规范 — 遵循上下文中已有的项目提交规范;否则遵循近期日志的模式;再否则使用约定式提交(
type(scope): description)。使用约定式提交时,如果fix和feat都适用,默认使用fix:(修复损坏或缺失的行为);将feat:留给新功能。用户的指定优先。 -
逻辑提交 — 如果更改的文件明显属于不同关注点,请分别提交(仅按文件级拆分,最多 2–3 个提交,不使用
git add -p)。如果无法明确区分,则合并为一个提交。 -
提交信息 — 标题使用祈使语气,说明实现的结果(现在可以做什么,或修复了什么),而不是列出文件。如果仅凭标题无法明确动机或权衡,再添加正文。如果已知本次提交对应的计划实施单元 ID(来自对话、调用方,或文件属于某个单元),请在该单元的 U-ID 后加括号——
(U3)表示单元 3。不要查找计划。如果提交涉及多个单元、单元不明确,或没有现成计划,则省略。如果提交包含他人的工作,且该工作不会以其名义通过其他方式提交(从其分支或 PR 移植,或应用其补丁),请为每位贡献者添加Co-authored-by: Name <email>尾注,涵盖这些提交的作者以及其Co-authored-by尾注中列出的人。请从这些提交或补丁中原样复制身份信息。切勿猜测邮箱:如果没有记录邮箱,请在提交信息正文中注明其姓名。- 错误:
Update checkout.rb/Add tests and fix stuff - 正确:
Fix double-submit on checkout - 正确:
Add per-subscription mute (U3)
- 错误:
-
暂存并提交 — 仅暂存指定文件(绝不使用
git add -A或git add .)。如果调用中包含exclude:<paths>,请遵守:这些文件无论其他更改如何都必须保持未提交;报告中说明已将其排除。在仓库外使用文件写入工具写入完整提交信息(标题行、空行、可选正文),然后每个提交组分两次调用来暂存并提交:
git add file1 file2 file3
git commit -F <message-file> -- file1 file2 file3
shell 不会用 -F 解析提交信息:$、引号、反引号或多行正文都会在任何 shell 下原样传递,无需满足任何引用规则。Git 的常规空白清理仍会生效(删除尾随空格、合并连续空行),这没有问题。
git commit 末尾必须指定路径:不带路径的 git commit 会提交整个暂存区,因此本次运行前已暂存的任何内容(调用方的 exclude: 路径,或用户已暂存但未指定的工作)都会被一并提交。指定路径可确保只提交该组文件,同时保留索引中的其他条目。
- 确认 — 运行
git status;报告提交哈希和标题。