---
description: 提交代码 — 提交所有变更并结束开发任务
---

# 提交代码

**第一步：更新 draft 状态（如有）、清理临时文件与想法文档**

1. 若代码源自 draft（`./drafts/<史诗>/N-<标题>.md`），先更新同目录 `summary.md` 中对应子任务状态：`开发中` → `已完成`
2. 删除 `.omo/plans/` 下本次生成的计划文件（`.md`），目录不存在则跳过
3. 若本次开发任务由一个 idea 文档发起（`./ideas/<名称>.md`），删除该文档

**第二步：检查变更**

运行 `git status` / `git diff`，确认变更范围合理。

**无关变动确认**：默认将无关变动一并提交，**尽量不打断用户**。仅在以下情况必须用 `question` 工具列出并询问用户：

- **未暂存的新文件**——可能是临时产物、调试输出、AI 生成文件，需要用户确认是否纳入提交。询问时**必须逐个列出新文件路径**（文件过多时可聚合表述，见下）
- **大文件**（>256K）——必须在询问中**重点标注体积**（如"3.2MB"），防止误提交二进制、压缩包、日志、AI 生成的大文件等

已跟踪文件的常规修改（无论是否与当前任务相关）**无需询问**，直接一并提交。

文件过多时可在询问中聚合表述，如 `a.txt、b.js 等 12 个文件` 或 `temp/ 文件夹下 8 个文件`。

**第三步：生成提交信息（Conventional Commits）**

> 格式以此处定义为准，无需获取历史 log。

格式：`<类型>(<作用域>): <主题>`

类型：`feat` / `fix` / `docs` / `style` / `refactor` / `perf` / `test` / `chore` / `ci` / `revert`
作用域（可选）：影响模块，多个用 `,` 分隔
主题（必填）：**中文**，≤50 字符，无句号

正文（可选）：解释**为什么**做，≤72 字符/行，与主题空一行

页脚（可选）：`Closes #123`、`BREAKING CHANGE: 说明`

示例：`feat(auth): 新增 JWT 登录认证功能`

**第四步：提交**

```bash
git add -A && git diff --cached --stat && git commit -m "<主题>" -m "<正文>"
```

> `git add -A` 确保所有变更（包括未跟踪的新文件）包含在同一次提交中。不可用 `git add .` 或选择性 add。
> `git diff --cached --stat` 用于验证暂存范围无遗漏。

**第五步：推送**

`git fetch` 后检查远端：无新提交 → `git push`；**有新提交 → 提醒用户手动处理，禁止自动 merge**。

**第六步：报告**

显示：commit hash（短格式）、变更统计（新增/修改/删除）、推送状态、draft 更新（如有）、想法文档删除（如有）。告知用户开发任务已结束。

## 约束

- `git add -A` 后必须 `git diff --cached --stat` 验证，确认无遗漏
- 不修改 git config，不跳过 hooks，不 force push
- 远端有新提交时**禁止自动 pull/merge**
