| name | git:commit |
| description | This skill should be used when the user asks to "commit changes", "make a commit", "commit files", "create a commit", "git commit", or mentions committing code. Enhances commits with mainline protection, conventional commits detection, and pre-commit verification. |
Git Commit Creation
Enhance commit creation with mainline branch protection, commit style detection, and pre-commit verification steps.
Quick Reference
Workflow:
- ✓ Check if on mainline (if yes, create branch first)
- ✓ Verify changes exist (use dynamic context)
- ✓ Detect commit style (detect-conventions skill)
- ✓ Run pre-commit checks (CLAUDE.md verification)
- ✓ Stage specific files (check for sensitive files, avoid
git add -A)
- ✓ Craft commit message (conventional commits if detected)
- ✓ Create and verify commit
Commit message format:
- With conventional commits:
type(scope): description
- Without:
Imperative description
- Max 50 chars subject, 72 chars body
Commit types: feat, fix, docs, style, refactor, perf, test, chore, build, ci
Sections: Current Git State • Core Workflow • Conventional Commits • Examples
Current Git State
- Current branch: !
git rev-parse --abbrev-ref HEAD
- Mainline branch: !
${CLAUDE_PLUGIN_ROOT}/skills/commit/scripts/detect-mainline.sh
- Status: !
git status --short
- Staged changes: !
git diff --cached --stat
- Recent commits: !
git log -5 --pretty=format:"%h %s"
Git Safety
Safety rules enforced by this skill:
- Never commit directly to mainline (redirect to branch creation)
- Check for sensitive files before staging
- Run pre-commit verification if specified
- Use specific file names rather than
git add -A
Core Workflow
Follow these steps when the user requests creating a commit:
1. Pre-Flight Checks
Check current branch:
Use the git state from dynamic context above to check if on mainline branch.
If on mainline branch:
- Warn user: "You're on the
{mainline} branch. Creating a feature branch first is recommended."
- Invoke
/git:branch skill using the Skill tool
- After branch created, continue with commit process
Verify there are changes to commit:
Use the git state from dynamic context above. Check the "Status" and "Staged changes" to see if there are any changes to commit.
If no changes exist:
Inform the user there's nothing to commit and exit early.
2. Detect Commit Style
Invoke the detect-conventions skill to determine commit style (conventional commits or standard).
3. Run Pre-Commit Verification
Check CLAUDE.md for pre-commit steps:
Read project CLAUDE.md and look for sections like:
## Git Workflow
- Before committing, run: `npm test` and `npm run lint`
If CLAUDE.md specifies pre-commit steps:
- Execute each command specified
- Verify all pass successfully
- If any fail, report to user and ask how to proceed
- Do NOT commit if verification fails without user approval
Example:
npm test
if [ $? -ne 0 ]; then
fi
If pre-commit checks fail:
Present options to user:
- Fix the failing tests/checks
- Skip tests (not recommended)
- Commit anyway with
--no-verify (only if user explicitly approves)
4. Stage Files
Determine what to stage:
Prefer staging specific files by name rather than using git add -A or git add .:
- Safer (avoids accidentally staging sensitive files)
- More intentional
- Clearer what's being committed
Check for sensitive files:
Warn before staging:
.env, .env.* files
- Files with
credentials, secrets, password in name
id_rsa, .pem, .key files
config.local.* files
Stage selected files:
git add file1.js file2.js file3.js
5. Craft Commit Message
Use results from the detect-conventions skill to determine commit message format.
Conventional Commits Reference
If conventional commits are used, follow this format: <type>(<scope>): <description>
| Type | Description |
|---|
| feat | New feature |
| fix | Bug fix |
| docs | Documentation |
| style | Code style (no logic change) |
| refactor | Code restructuring |
| perf | Performance improvement |
| test | Adding tests |
| chore | Maintenance |
| build | Build system changes |
| ci | CI/CD changes |
Subject: Imperative mood, lowercase, no period, max 50 chars
Example:
feat(auth): add OAuth2 login support
Implements OAuth2 authentication with Google and GitHub providers.
Includes token refresh and session management.
Closes #123
If conventional commits NOT used:
Use clear, descriptive messages:
- Start with imperative verb (Add, Fix, Update, Remove)
- Be specific about what changed
- Explain why if not obvious
Example:
Add user authentication with OAuth2
Allows users to log in with Google or GitHub accounts.
Message guidelines:
- Subject line: Max 50 characters, imperative mood, no period
- Body: Wrap at 72 characters, explain what and why
- Footer: Reference issues, breaking changes
6. Create Commit
Hand off to Claude's built-in commit workflow:
At this point, let Claude's default commit capabilities handle:
- Finalizing message
- Creating the commit
- Co-authored-by attribution
7. Verify Success
Report success to user with commit hash and message. If there was a problem, report the error.
Examples
Example 1: Commit on Main Branch (Redirects to Branch Creation)
User request: "Commit the authentication changes"
Steps:
- Pre-flight: On
main branch (is mainline)
- Warn: "You're on
main. Creating feature branch first."
- Invoke
/git:branch skill → Creates feat/authentication
- Continue on new branch, verify changes exist ✓
- Detect commit style: Conventional commits detected
- No pre-commit checks in CLAUDE.md
- Stage files:
git add src/auth.js src/auth.test.js
- Craft message:
feat(auth): add user authentication
- Create commit and verify
Example 2: Bug Fix with Pre-Commit Checks
User request: "Commit the login fix"
Steps:
- Pre-flight: On
fix/login-bug (not mainline) ✓, changes exist ✓
- Detect commit style: Conventional commits detected
- Check CLAUDE.md: Says "run: npm test before committing"
- Run verification:
npm test → Pass ✓
- Stage:
git add src/login.js
- Craft message:
fix(auth): resolve token expiry issue
- Create commit and verify
Example 3: Simple Commit without Conventional Commits
User request: "Commit my changes"
Steps:
- Pre-flight: On
update-readme (not mainline) ✓, changes exist ✓
- Detect commit style: No conventional commits
- No pre-commit checks in CLAUDE.md
- Stage:
git add README.md
- Craft message:
Update installation instructions
- Create commit and verify
Task Coordination
At workflow start:
- Create coordination task with TaskCreate:
- subject: "Create git commit"
- activeForm: "Creating git commit"
- metadata:
{ workflow: "commit", branch: "<current-branch>", startedAt: "<timestamp>" }
During workflow:
- Update task metadata as conventions are detected (from detect-conventions skill)
- Add metadata on errors or user decisions
At workflow end:
- Update task status to completed
- Add result metadata:
{ result: { commitSha: "<sha>", message: "<summary>" } }
Integration with Other Skills
This skill invokes:
/git:branch - When user tries to commit on mainline
This skill is invoked by:
/git:pr - When creating PR with uncommitted changes