| name | git-flow |
| description | 使用 conventional commits 规范执行 Git 提交流程,默认同时识别并处理当前子仓库及包含它的主仓库,按“子仓库先提交、主仓库后提交”的顺序更新关联变更。用于用户想提交文件、要求执行“git commit”“提交代码”“git add”,或希望走结构化提交流程时;任何 Git 暂存、提交、推送请求都应触发。 |
使用子代理执行完整 Git 提交流程,避免污染主窗口上下文。除非用户明确限定单个仓库,否则默认把当前子仓库和包含它的主仓库视为一次完整提交任务。
默认仓库范围
- 先确定当前工作目录所属的 Git 仓库,称为“当前仓库”。
- 从当前仓库根目录的父目录开始向上查找另一个 Git 仓库;找到时称为“主仓库”,当前仓库称为“子仓库”。
- 检测到主仓库时,默认检查并处理两个仓库,不要只提交子仓库后结束。
- 子仓库提交后重新检查主仓库,使主仓库中的 submodule/gitlink 指针更新能够进入主仓库提交。
- 如果主仓库还有与本次任务直接相关的配置、文档或其他变更,一并纳入主仓库提交;不要提交无关变更。
- 如果当前目录本身已位于最外层仓库,或向上没有其他 Git 仓库,则按单仓流程处理。
- 用户明确要求“只提交当前仓库”“不要处理主仓库”或指定单一仓库范围时,以用户要求为准。
双仓执行顺序固定为:
- 检查子仓库和主仓库的状态及差异。
- 暂存并提交子仓库变更。
- 重新检查主仓库,暂存并提交子仓库指针及相关变更。
- 需要推送时,先推送子仓库,再推送主仓库,避免主仓库引用远端不存在的子仓库提交。
参数(push 意愿)
调用 slash 命令时可在 Skill 名后指定参数:
/git-flow(无参数)→ 两个仓库提交后自动推送。
/git-flow y 或 /git-flow yes → 两个仓库提交后自动推送。
/git-flow n、/git-flow no、/git-flow f 或 /git-flow false → 提交两个仓库但不推送。
- 用户明确说明“不 push / 不推送 / 只提交 / 不要推送”时 → 提交后不推送。
流程
根据用户参数和自然语言意图决定推送策略,然后启动 general-purpose 子代理执行完整流程。默认策略是提交后自动推送两个仓库;只有用户显式拒绝推送时才跳过两个仓库的推送。
子代理 Prompt 必须包含以下要求:
你是 Git 提交流程助手。执行以下完整流程。
### Step 1:确定仓库范围
1. 确认当前工作目录所属仓库的根目录。
2. 从该仓库根目录的父目录开始向上查找另一个 Git 仓库。
3. 如果找到,默认将当前仓库作为子仓库、外层仓库作为主仓库,两者都要处理;除非用户明确要求只处理一个仓库。
4. 如果没有找到外层仓库,则执行单仓流程。
### Step 2:分析当前变更
分别执行 `git status` 和 `git diff`,检查目标仓库中的 staged、unstaged 和 untracked 变更。按仓库展示变更列表,不读取、展示或提交密钥、凭据及其他敏感文件。
### Step 3:提交子仓库
如果存在子仓库变更,根据任务上下文自动选择相关文件暂存,不使用会混入无关文件的宽泛暂存方式。自动推断 commit 类型和描述并提交,不询问用户。没有变更时跳过,不创建空提交。
### Step 4:提交主仓库
子仓库提交完成后,重新检查主仓库。自动暂存已更新的 submodule/gitlink 指针,以及与本次任务直接相关的主仓库变更;自动生成独立的 commit message 并提交。不要提交主仓库中的无关变更,没有相关变更时跳过。
### Step 5:推送
如果推送策略为“推送”,在所有提交成功后先推送子仓库,再推送主仓库,不再询问用户。如果策略为“不推送”,两个仓库都不推送。
### Step 6:汇报
按仓库列出 commit hash、commit message 和 push 结果;跳过的仓库说明原因。
Commit message
每个仓库分别根据自身变更生成一行 type: description:
| 变更内容 | type |
|---|
| 新增功能代码、模块 | feat |
| 仅文档、注释修改 | doc |
| 性能优化、代码优化 | opt |
| 重构、整理代码 | refactor |
| Bug 修复 | fix |
注意
- 不要假设主仓库一定使用 Git submodule;以 Git 实际状态和跟踪关系为准。
- 任一仓库提交失败时停止后续提交和推送,保留现场并报告错误。
- 推送前确认两个仓库的目标分支和 upstream;不得 force push。
- 两个仓库都没有相关变更时,提示用户并结束。