# Git Commit Auto

> 自动扫描 Git 暂存区/工作区变更，生成中文提交信息（feat/fix/docs/refactor/test/chore 等）并执行 `git commit`。当用户提示词包含 “commit”/“git commit”/“提交”/“生成提交信息”/“帮我提交” 等时使用。

- Skill: `junhualiu1/git-commit-auto` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add junhualiu1/git-commit-auto`
- Raw SKILL.md: https://api.skillmd.com/api/skills/junhualiu1/git-commit-auto/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: JunhuaLiu1 (https://skillmd.com/u/junhualiu1)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/junhualiu1/git-commit-auto

---


# 目标

- 在当前 Git 仓库里完成一次可控的提交：检查变更 →（必要时）暂存 → 生成中文 commit message → `git commit` → 输出结果。
- 提交信息遵循 Conventional Commit 形式，subject 用中文：`feat: 完成注册功能`。

# 工作流（按顺序执行）

## 1) 侦测变更

运行以下命令收集信息（不要臆测）：

- `git rev-parse --is-inside-work-tree`
- `git status --porcelain=v1`
- `git diff --stat`
- `git diff --cached --stat`

## 2) 暂存策略（安全优先）

- 若存在 staged 变更：默认只提交 staged（使用 `git diff --cached` 生成信息）。
- 若没有 staged 但工作区有变更：
  - 若用户明确说“全部提交/提交所有/直接提交工作区变更”，执行 `git add -A`。
  - 否则只问 1 个问题确认：是否执行 `git add -A` 再提交（默认推荐确认后再做）。

## 3) 生成提交信息（中文）

优先用脚本生成候选提交信息（基于 staged diff）：

- `python3 codex-skills/git-commit-auto/scripts/suggest_commit_message.py --cached`

若希望一键执行（先暂存再提交），可用：

- `python3 codex-skills/git-commit-auto/scripts/auto_commit.py --stage auto --yes`

若脚本无法给出清晰描述（例如“更新项目变更”过于笼统），只问 1 个问题让用户补一句中文摘要（例如“完成注册功能 / 修复播放页崩溃”），并保留脚本推断出的类型前缀（feat/fix 等）。

### 类型选择（启发式）

- 仅 `docs/` 或 `*.md`：`docs`
- 仅测试相关（如 `*_test.go`、`*.spec.ts`、`*.test.ts`）：`test`
- 仅配置/工程化（如 `package.json`、`go.mod`、CI 配置等）：`chore`
- 无明确证据时默认：`feat`
- 用户明确“修复/bug/崩溃/异常”：`fix`

### Message 约束

- subject 使用半角冒号：`feat: ...`
- subject 尽量 ≤ 50 字符（太长时压缩）
- body 可选：列 3–8 条要点或主要文件（不要堆满 diff）

## 4) 提交

- 提交前输出变更概览（文件列表 + stat），避免“盲提交”
- 执行：`git commit -m "<subject>"`（有 body 则用第二个 `-m`）
- 提交后校验：`git status --porcelain=v1`

# 默认交互策略（尽量少问）

- 能自动推断就直接提交（用户明确“直接提交/commit -y/不用确认”时不再二次确认）。
- 不确定会不会把不该提交的内容带上时（比如 unstaged 很多、含敏感文件、或变更跨度过大）必须先确认。

