/commit
This skill analyzes code changes and generates a high-quality commit message that follows the project's existing style.
Pre-fetched Context
- Recent commits: !
git log --oneline -15 2>/dev/null || echo "No git history" - Current branch: !
git branch --show-current 2>/dev/null - Staged changes: !
git diff --staged --stat 2>/dev/null | head -30 - Unstaged changes: !
git diff --stat 2>/dev/null | head -20 - File status: !
git status -s 2>/dev/null | head -20
Actions
-
Step 1: Analyze Context
- Review the pre-fetched git information above.
- If there are no changes (both staged and unstaged empty), inform the user and stop.
-
Step 2: Handle Unstaged Changes
- If there are only unstaged changes, ask the user if they want to stage files first.
- Use
AskUserQuestionto present options: stage all, stage specific files, or cancel.
-
Step 3: Analyze Changes
- Read the actual diff content for staged changes:
git diff --staged - Understand what was changed and why.
- Read the actual diff content for staged changes:
-
Step 4: Generate Commit Message
- Based on the project's historical commit style (from pre-fetched context), generate a message that:
- Follows the project's format (conventional commits, emoji usage, etc.)
- Accurately and concisely describes the changes
- Explains the "why" behind the change, not just the "what"
- Based on the project's historical commit style (from pre-fetched context), generate a message that:
-
Step 5: Propose and Commit
- Use
AskUserQuestionto present the generated message. - Options: use as-is, edit, or cancel.
- If confirmed, run
git commit -m "<message>".
- Use