--- description: Commit staged files with auto-generated message and create version tag --- # git-commit Auto-generate commit message for staged files, commit to local repository, and create version tag. ## What It Does - Analyzes staged changes - Auto-generates meaningful commit message following Conventional Commits - Detects project type and updates version number if needed - Creates appropriate git tag (polyrepo or monorepo format) - Does NOT push to remote (local only) ## Quick Start Use this command when you have files in staging area and want to commit with proper version tagging. ## Workflow This command follows the git workflow defined in `skill/git/SKILL.md`: 1. ✓ Check staging area (must have files) 2. ✓ Analyze changes and repository type 3. ✓ Detect project type and version file 4. ✓ Generate commit message (Conventional Commits) 5. ✓ Update version number if needed 6. ✓ Commit with generated message 7. ✓ Create version tag 8. ✗ Skip push (use `/git-push` to push) ## Prerequisites **Staging area must not be empty:** ```bash git add ``` ## Options User can optionally input: - **"skip tag"** or **"skip"**: Skip tag creation, only commit ## Steps ### 1. Check Staging Area ```bash git diff --cached --name-only ``` **If empty:** - Display: "暂存区为空,请先使用 `git add` 添加文件。" - **Terminate execution** ### 2. Collect Information (parallel) ```bash git status git diff --cached git log --oneline -10 git tag --list | sort -V | tail -5 ``` If `AGENTS.md` exists, read it for: - Repository type (polyrepo/monorepo) - Version update rules - Project structure ### 3. Detect Repository Type - **Polyrepo**: Single project, tag format `1.2.0` - **Monorepo**: Multiple subprojects, tag format `-1.2.0` Detection: - Check `AGENTS.md` for monorepo indicator - Check directory structure (`packages/`, `apps/`, etc.) - Analyze changed file paths for subproject scope ### 4. Detect Project Type and Version Follow `skill/git/SKILL.md` guidelines: **Common project types:** - iOS: `*.xcodeproj/project.pbxproj` → `MARKETING_VERSION` - Node.js: `package.json` → `version` - Android: `build.gradle(.kts)` → `versionName` - Go: Git tag only (no version file) - etc. **Version increment rules:** - `feat`: minor +1 → `1.2.0` → `1.3.0` - `fix`: patch +1 → `1.2.3` → `1.2.4` - `perf`: patch +1 - Breaking change: major +1 → `1.2.3` → `2.0.0` **Only update version for user-perceivable changes:** - ✓ feat, fix, perf, breaking changes - ✗ docs, test, refactor, style, chore, ci, build ### 5. Generate Commit Message Follow Conventional Commits specification: **Format:** ``` (): ``` **Commit language:** - macOS/Linux: Chinese (中文) - Windows: English (encoding issue) **Monorepo scope:** - If changes affect single subproject: `feat(ios): 添加新功能` - If multiple subprojects: `feat: 添加新功能` ### 6. Update Version Number If version update is needed: 1. Update version file with new version 2. Add version file to staging: `git add ` 3. Verify: `git diff --cached --name-only` ### 7. Commit Changes ```bash # macOS/Linux (Chinese) git commit -m "feat(android): 添加用户认证" # Windows (English) git commit -m "feat(android): add user authentication" # Multi-line (macOS/Linux) git commit -m "$(cat <<'EOF' feat: add user authentication - Add OAuth2 support - Implement JWT tokens EOF )" ``` ### 8. Create Tag **Only if:** - Version update occurred - User didn't input "skip tag" **Tag format:** - Polyrepo: `git tag -a "1.2.0" -m "feat: add feature"` - Monorepo: `git tag -a "ios-1.2.0" -m "feat(ios): add feature"` **Tag annotation:** - Use same content as commit message - Multi-line commits → multi-line annotations ### 9. Display Result Show summary in Chinese: ``` ✓ 提交成功 提交信息:feat(android): 添加用户认证 版本标签:android-1.3.0 要推送到远程仓库,请运行:/git-push ``` ## Use Cases - Commit staged changes with proper versioning - Create local version tag for release preparation - Follow semantic versioning automatically ## Related Commands - `/git-status` - Check file changes before commit - `/git-push` - Push commits and tags to remote - `/git-push-tags` - Push tags only ## Reference Complete workflow documentation: `skill/git/SKILL.md`