| name | commit |
| description | 把项目当前所有变更按内容分组,一组一组地调用 /msg 生成提交消息并输出 git commit 命令,由用户逐组执行后再继续下一组。带 --auto 参数时自动执行所有组的 git add 和 git commit,无需用户介入。 |
/commit — 分组提交助手
参数
| 参数 | 说明 |
|---|
| (无) | 交互模式:每组输出命令,等用户手动执行后再继续 |
--auto | 自动模式:依次对所有组自动执行 git add + git commit,无需用户介入 |
工作原理
交互模式(默认)
每次调用 /commit 只处理一组变更:
- 用
git status 扫描当前所有未提交变更(staged + unstaged + untracked)
- 若无变更 → 输出"无未提交变更"并退出
- 将变更按内容领域分组(见"分组策略")
- 展示完整分组计划(首次)或当前剩余组(后续调用)
- 取第一组,执行
/msg 流程(stage → 生成消息 → 写临时文件)
- 输出
bash wiki/scripts/skill_commit.sh -F <tmpfile> 命令
- 告知用户执行该命令后再次调用
/commit 处理下一组
用户工作流:/commit → 执行命令 → /commit → 执行命令 → … 直到所有组完成。
自动模式(--auto)
一次调用处理所有组:
- 用
git status 扫描全部变更,按分组策略归类
- 若无变更 → 输出"无未提交变更"并退出
- 展示完整分组计划
- 逐组执行(无需用户确认):
a.
git add <该组所有文件路径>
b. git diff --cached 生成提交消息草稿
c. 写入 /tmp/gitmsg_*.txt
d. 执行 bash wiki/scripts/skill_commit.sh -F <tmpfile>
e. 输出该组提交结果(commit hash + 消息首行)
- 所有组完成后输出汇总
注意:--auto 模式下 Claude 有权直接执行 git add 和 git commit,这是用户明确授权的行为。
分组策略
按功能语义分组,不按目录前缀。每组代表一类独立的变更意图,一个文件只属于一组。
| 优先级 | 组名 | 功能 | 典型路径 |
|---|
| 1 | skills | Claude skill / 基因 | .claude/skills/、local/skills/、local/gene/ |
| 2 | scripts | 自动化脚本与构建工具 | local/script/*.py、local/script/*.sh |
| 3 | frontend | 浏览器端渲染(JS + CSS 合并) | docs/wiki/js/、docs/wiki/css/、docs/wiki/plugins/ |
| 4 | pages | Wiki 词条内容 | docs/wiki/pages/ |
| 5 | history | 词条修订历史 | docs/wiki/history/ |
| 6 | logs | 流程日志(RFC / butler / 审计) | logs/ |
| 7 | config | 项目配置 | docs/wiki/pages.json、*.json、.gitignore |
| 8 | ref | 文档、规范、说明 | ref/、README.md、CHANGELOG.md、CLAUDE.md、LAW.md、TODO.md、CONSTITUTION.md |
| 9 | local | 本地私有数据(不进主仓) | local/config/、local/memory/ |
| 10 | other | 其他所有文件 | — |
判断原则:先看文件的用途,再看路径。路径是辅助线索,不是唯一依据。
若某组只有 1 个文件且与相邻组强相关,可合并(由 Claude 判断)。
执行步骤
Step 1 — 扫描变更
git status --short
收集所有 M、A、D、?? 状态的文件路径。
Step 2 — 分组并展示计划
按分组策略归类,输出如下格式:
📦 分组计划(共 N 组):
[1/N] scripts(3 个文件)
- wiki/scripts/record_revision.py
- wiki/scripts/publish.sh
- wiki/scripts/rebuild_recent.py
[2/N] skills(1 个文件)
- .claude/skills/wiki/SKILL.md
[3/N] docs(2 个文件)
- README.md
- wiki/doc/recent-log.md
Step 3 — 处理组(交互模式)
判断"第一组":即 git status 中仍有变更的最高优先级组(已完成提交的组不再出现在 status 中)。
对该组执行 /msg 流程:
git add <该组所有文件路径>(逐个显式路径,禁止 -A/.)
git diff --cached --stat 确认缓存区
git diff --cached 查看具体内容
git log --oneline -5 了解 commit 风格
- 撰写中文提交消息草稿
- 用 Bash 写入
/tmp/(禁止用 Write 工具,防止写入项目目录):
MSGFILE=/tmp/gitmsg_$(date +%Y%m%d_%H%M%S)_$(git diff --cached | sha256sum | cut -c1-6).txt
cat > "$MSGFILE" << 'EOF'
<消息正文>
EOF
echo "$MSGFILE"
Step 4 — 输出并等待(交互模式)
输出格式:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[1/N] scripts — 提交消息已写入 /tmp/gitmsg_XXXXXXXX_XXXXXX.txt
<消息草稿全文>
执行:
bash wiki/scripts/skill_commit.sh -F /tmp/gitmsg_20260427_143521_a3f8c1.txt
完成后再次运行 /commit 处理下一组 [2/N] skills
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
若这是最后一组,替换为"完成后所有变更已提交"。
Step 3-AUTO — 逐组自动提交(--auto 模式)
对每组依次执行,不停顿等待用户:
git add <该组所有文件路径>(逐个显式路径,禁止 -A/.)
git diff --cached 查看内容,撰写中文提交消息草稿
- 写入
/tmp/gitmsg_*.txt
- 直接执行
bash wiki/scripts/skill_commit.sh -F <msgfile>
- 输出该组结果:
✅ [1/N] scripts — <commit hash 短码> <消息首行>
- 继续下一组,直到全部完成
Step 4-AUTO — 汇总(--auto 模式)
所有组完成后输出:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 全部 N 组已自动提交:
abc1234 [1/N] scripts: …
def5678 [2/N] skills: …
…
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
禁止事项
- ❌ 禁止
git add -A / git add . / git add --all(无论何种模式)
- ❌ 交互模式下禁止自动执行
git commit(--auto 模式除外,该模式已获用户授权)
- ❌ 禁止用 Write 工具写消息文件——必须用 Bash 写入
/tmp/gitmsg_*.txt,不得写入项目目录
边界情况
- 缓存区已有内容:交互模式下先询问用户是否清除(
git restore --staged .)还是并入当前组;--auto 模式下将缓存区内容并入当前最高优先级组直接处理
- 文件跨组:按优先级表取最高优先级组
- 只有一组:直接执行,不展示分组计划