# Git Commit Workflow 提交暂存文件,自动生成提交信息并创建版本标签的完整工作流。 ## 概述 此工作流用于: - 自动分析暂存区变更 - 根据 Conventional Commits 规范生成提交信息 - 检测项目类型并更新版本号 - 创建语义化版本标签 ## 执行步骤 ### 步骤 1: 检查暂存区 ```bash git diff --cached --name-only ``` - 如果暂存区为空,通知用户并停止 - 如果有文件,继续下一步 ### 步骤 2: 收集信息(并行执行) ```bash # 并行执行以下命令 git status git diff --cached git log --oneline -10 git tag --list | sort -V | tail -5 ``` 同时检查 `AGENTS.md` 文件获取: - 仓库类型(polyrepo/monorepo) - 版本规则 - 项目结构信息 ### 步骤 3: 检测仓库类型 **Polyrepo(单仓库)** - Tag 格式:``(如 `1.2.0`) **Monorepo(多项目)** - Tag 格式:`-`(如 `ios-1.2.0`) - 检测特征:`packages/`、`apps/`、`services/` 目录 ### 步骤 4: 检测项目类型和版本 | 项目类型 | 版本文件 | 版本字段 | |---------|---------|---------| | iOS | `*.xcodeproj/project.pbxproj` | `MARKETING_VERSION` | | Node.js | `package.json` | `version` | | Android (Groovy) | `app/build.gradle` | `versionName` | | Android (Kotlin) | `app/build.gradle.kts` | `versionName` | | Go | Git tag only | - | | Python | `pyproject.toml` / `setup.py` | `version` | | Rust | `Cargo.toml` | `version` | ### 步骤 5: 生成提交信息 遵循 Conventional Commits 格式: ``` (): ``` **提交类型**: | Type | 描述 | 版本影响 | |------|------|---------| | `feat` | 新功能 | minor +1 | | `fix` | Bug 修复 | patch +1 | | `perf` | 性能优化 | patch +1 | | `BREAKING CHANGE` | 破坏性变更 | major +1 | | `docs` | 文档更新 | 无 | | `style` | 代码格式 | 无 | | `refactor` | 重构 | 无 | | `test` | 测试 | 无 | | `chore` | 维护任务 | 无 | | `ci` | CI/CD 变更 | 无 | | `build` | 构建配置 | 无 | **提交语言**: - macOS/Linux:使用中文 - Windows:使用英文(避免编码问题) **Monorepo Scope**: - 单项目变更:`feat(ios): 添加上传功能` - 多项目变更:`chore: 更新共享依赖` ### 步骤 6: 确定新版本号 根据提交类型计算新版本: **版本递增规则**: - `feat`:minor +1(如 `1.2.0` → `1.3.0`) - `fix`/`perf`:patch +1(如 `1.2.3` → `1.2.4`) - Breaking change:major +1(如 `1.2.3` → `2.0.0`) **不更新版本**: - `docs`、`test`、`refactor`、`style`、`build`、`ci`、`chore` ### 步骤 7: 更新版本文件并暂存 如果需要更新版本(步骤 6 确定了新版本号): 1. **更新版本文件**:将版本号写入对应的版本文件 2. **添加到暂存区**: ```bash git add ``` 3. **验证暂存**: ```bash git diff --cached --name-only ``` 确认版本文件已在暂存区 ### 步骤 8: 执行提交 ```bash git commit -m "" ``` ### 步骤 9: 创建版本标签 仅在版本更新时创建(除非用户指定 "skip tag"): **Polyrepo**: ```bash git tag -a "1.2.0" -m "" ``` **Monorepo**: ```bash git tag -a "ios-1.2.0" -m "" ``` ## 选项 - `skip tag` / `skip`:跳过标签创建 ## 输出格式 ``` ✓ 提交成功 提交信息:[commit message] 版本标签:[tag](如果创建了) 要推送到远程仓库,请运行:/git-push ``` ## 注意事项 - 此命令**不会推送**到远程,使用 `/git-push` 推送 - 暂存区为空时会提示用户先 `git add` - 标签注释使用与提交相同的消息内容 ## 相关文档 - [Git Workflow Best Practices](./SKILL.md) - [Push Workflow](./push-workflow.md)