mcpField
C
ce-commit

ce-commit

github.com/everyinc开发25.8k3.4k 次安装今天更新
代码仓库

关于 ce-commit

ce-commit 是一项用于将当前工作区内容提交到本地 Git 的技能,面向需要规范整理提交的开发者。它强调明确选择文件、遵循项目提交惯例并检查提交后的状态,不负责推送或创建 PR。

主要功能

  1. 01检查 Git 状态、差异、分支和历史
  2. 02必要时创建功能分支
  3. 03将不同改动拆分为多个提交
  4. 04仅暂存指定文件并明确提交路径
  5. 05确认提交结果与工作区状态

适用场景

  1. 01完成改动后本地提交且不推送
  2. 02避免将无关或预暂存文件带入提交
  3. 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> 比较。

工作流

  1. 收集 — 运行上方所有 Context 命令(每个命令单独调用 shell),然后继续。

  2. 没有内容需要提交 — 如果 git status 显示没有已暂存、已修改或未跟踪的文件,报告这一情况并停止。不要仅用 git diff HEAD 判断工作区是否干净(它会漏掉未跟踪文件)。

  3. 先创建分支 — 如果 HEAD 分离,或当前位于默认分支(main / master / 上方提到的裸默认名称),根据更改内容创建功能分支(git checkout -b <name>),然后重新读取 git branch --show-current。不要询问——即使只提交,也不能让工作仅留在分离的 HEAD 或默认分支上。如果派生出的名称已存在,请选择一个不冲突的后缀。

  4. 提交规范 — 遵循上下文中已有的项目提交规范;否则遵循近期日志的模式;再否则使用约定式提交(type(scope): description)。使用约定式提交时,如果 fix 和 feat 都适用,默认使用 fix:(修复损坏或缺失的行为);将 feat: 留给新功能。用户的指定优先。

  5. 逻辑提交 — 如果更改的文件明显属于不同关注点,请分别提交(仅按文件级拆分,最多 2–3 个提交,不使用 git add -p)。如果无法明确区分,则合并为一个提交。

  6. 提交信息 — 标题使用祈使语气,说明实现的结果(现在可以做什么,或修复了什么),而不是列出文件。如果仅凭标题无法明确动机或权衡,再添加正文。如果已知本次提交对应的计划实施单元 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)
  7. 暂存并提交 — 仅暂存指定文件(绝不使用 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: 路径,或用户已暂存但未指定的工作)都会被一并提交。指定路径可确保只提交该组文件,同时保留索引中的其他条目。

  1. 确认 — 运行 git status;报告提交哈希和标题。

评论

支持 Markdown