---
name: git-commit
description: "检查 Git 变更，生成中文提交信息或执行本地提交，标题使用 tag: 中文内容。适用于提交代码、整理 commit message 等请求；仅要求生成提交信息时不执行提交。"
---

# Git 中文提交

> 状态：标题格式与中文要求为用户指定约定；下列 tag 分类为建议默认值，不代表已确认的团队标准。

## 标题格式

```text
tag: 内容
```

- 标题只占一行；使用半角冒号 `:`，其后恰好一个空格。
- `tag` 使用小写英文提交类型；沿用目标项目已约定的类型，未约定时参考下表。
- 内容使用中文，说明实际变更及其作用；可保留 Go、API、文件路径、函数名等必要英文。
- 不添加 `(scope)`、`!` 或表情等标题变体；模块名、兼容性影响可写入中文内容或正文。
- 根据真实 diff 编写标题，避免“更新代码”“修复问题”等缺少具体对象的描述。

| tag | 建议用途 |
| --- | --- |
| `feat` | 新增功能或能力 |
| `fix` | 修复错误或行为缺陷 |
| `docs` | 仅修改文档、说明或知识内容 |
| `style` | 仅调整格式，不改变程序行为 |
| `refactor` | 重构实现，不新增功能或修复缺陷 |
| `perf` | 改进性能 |
| `test` | 新增或调整测试 |
| `build` | 调整构建、打包或依赖 |
| `ci` | 调整持续集成配置 |
| `chore` | 其他维护事项，如忽略规则、开发工具配置 |
| `revert` | 回退已有提交 |

示例：

```text
feat: 新增知识文件健康检查接口
fix: 修复知识目录路径校验
docs: 补充 Git 提交工作流说明
chore: 完善系统文件与构建缓存的忽略规则
```

需要正文时，在标题后空一行，用中文说明必要的原因、影响与验证情况。保持真实换行，不把字面量 `\n` 当作换行。

## 执行流程

1. **确定请求范围。** 用户只要求提交信息时，读取变更并返回标题或正文；用户已要求执行提交且范围清晰时，直接继续，无需再次确认。创建或修改本 Skill 本身不授权提交当前仓库。
2. **检查实际变更。** 阅读目标项目适用的 `AGENTS.md` 等约束，结合 `git status --short`、`git diff`、`git diff --cached` 判断工作区与暂存区内容；准备纳入的未跟踪文件需单独阅读，不能仅凭文件名生成信息。
3. **确定提交内容。** 只纳入用户授权的文件或改动；按主要目的选择 tag。独立且无关的改动宜拆分提交。存在合并冲突时先处理冲突；没有可提交变更时说明情况，不创建空提交。
4. **完成适用验证。** 运行项目要求及与本次变更相称的检查。文档修改无需为了提交新增测试；未执行或未通过的检查应如实报告，不宣称已通过。
5. **核对并提交。** 按明确路径执行 `git add -- ...`，避免默认使用 `git add .` 或 `git add -A`。检查最终 diff 与 `git diff --cached --check`，确保标题覆盖实际提交内容。只有暂存区全部属于本次范围时，才直接使用普通 `git commit`；若已有无关暂存内容，保留其状态，采用按文件或补丁隔离的提交方式，无法安全隔离且范围不明时再询问用户。
6. **确认结果。** 提交成功后检查 `git log -1 --format='%h %s'` 和 `git status --short`，报告提交哈希、完整标题、验证结果及剩余改动。仅生成提交信息的请求直接返回信息，不执行暂存或提交。

简单标题可使用：

```bash
git commit -m 'docs: 补充 Git 提交工作流说明'
```

需要多段正文或复杂字符时，将完整信息写入临时文件，通过 `git commit --file <message-file>` 提交，避免 shell 转义改变原文。

## 操作边界

- 本地提交不包含自动推送、创建 Git tag、发布或创建 PR；这些操作需有对应的用户授权。
- 保留用户已有工作区与暂存区改动；不为凑出干净状态而使用 `reset --hard`、`checkout --` 或 `clean` 丢弃内容。
- 不默认使用 `--amend`、改写历史、修改 Git 身份或通过 `--no-verify` 绕过检查。
- 提交失败时读取原因；对明确且在授权范围内的问题修复后重试。缺少身份、签名不可用或检查仍失败时，报告具体阻塞，不擅自变更身份或绕过检查。
