commit
把项目当前所有变更按内容分组,一组一组地调用 /msg 生成提交消息并输出 git commit 命令,由用户逐组执行后再继续下一组。带 --auto 参数时自动执行所有组的 git add 和 git commit,无需用户介入。
来源信息
- 仓库
- OrangeViolin/high-school-physics-wiki
- 最近来源活动
- 2026年5月24日 16:20
- 检测到的 SKILL.md 语言
- 中文
- 星标
- 2
- 分支
- 1
安装方式
默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。
检查来源文件
决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。
正在显示 SKILL.md
SKILL.md
来源说明 · 只读预览- name
- commit
- description
- 把项目当前所有变更按内容分组,一组一组地调用 /msg 生成提交消息并输出 git commit 命令,由用户逐组执行后再继续下一组。带 --auto 参数时自动执行所有组的 git add 和 git commit,无需用户介入。
# /commit — 分组提交助手
## 参数
| 参数 | 说明 |
|------|------|
| (无) | 交互模式:每组输出命令,等用户手动执行后再继续 |
| `--auto` | 自动模式:依次对所有组自动执行 `git add` + `git commit`,无需用户介入 |
## 工作原理
### 交互模式(默认)
每次调用 `/commit` 只处理**一组**变更:
1. 用 `git status` 扫描当前所有未提交变更(staged + unstaged + untracked)
2. 若无变更 → 输出"无未提交变更"并退出
3. 将变更按**内容领域**分组(见"分组策略")
4. 展示完整分组计划(首次)或当前剩余组(后续调用)
5. 取**第一组**,执行 `/msg` 流程(stage → 生成消息 → 写临时文件)
6. 输出 `bash wiki/scripts/skill_commit.sh -F <tmpfile>` 命令
7. 告知用户执行该命令后再次调用 `/commit` 处理下一组
用户工作流:`/commit` → 执行命令 → `/commit` → 执行命令 → … 直到所有组完成。
### 自动模式(`--auto`)
一次调用处理**所有组**:
1. 用 `git status` 扫描全部变更,按分组策略归类
2. 若无变更 → 输出"无未提交变更"并退出
3. 展示完整分组计划
4. 逐组执行(无需用户确认):
a. `git add <该组所有文件路径>`
b. `git diff --cached` 生成提交消息草稿
c. 写入 `/tmp/gitmsg_*.txt`
d. 执行 `bash wiki/scripts/skill_commit.sh -F <tmpfile>`
e. 输出该组提交结果(commit hash + 消息首行)
5. 所有组完成后输出汇总
**注意**:`--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 — 扫描变更
```bash
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` 流程:
1. `git add <该组所有文件路径>`(逐个显式路径,**禁止** `-A`/`.`)
2. `git diff --cached --stat` 确认缓存区
3. `git diff --cached` 查看具体内容
4. `git log --oneline -5` 了解 commit 风格
5. 撰写中文提交消息草稿
6. 用 Bash 写入 `/tmp/`(**禁止用 Write 工具**,防止写入项目目录):
```bash
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` 模式)
对每组依次执行,**不停顿等待用户**:
1. `git add <该组所有文件路径>`(逐个显式路径,**禁止** `-A`/`.`)
2. `git diff --cached` 查看内容,撰写中文提交消息草稿
3. 写入 `/tmp/gitmsg_*.txt`
4. **直接执行** `bash wiki/scripts/skill_commit.sh -F <msgfile>`
5. 输出该组结果:
```
✅ [1/N] scripts — <commit hash 短码> <消息首行>
```
6. 继续下一组,直到全部完成
### 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` 模式下将缓存区内容并入当前最高优先级组直接处理
- **文件跨组**:按优先级表取最高优先级组
- **只有一组**:直接执行,不展示分组计划
在 GitHub 查看