git-commit-crafter
Creates atomic git commits following Conventional Commits specification with detailed, well-structured messages. Analyzes changes and splits them into logical units. Use when committing code changes that need proper structure and comprehensive documentation (e.g., "commit my authentication changes" or "finished implementing search, time to commit").
When & Why to Use This Skill
The Git Commit Crafter is a specialized Claude skill designed to automate the creation of high-quality, atomic Git commits. By strictly adhering to the Conventional Commits specification, it ensures that every code change is documented with clear, well-structured messages and split into logical, independently revertable units. This tool significantly enhances repository maintainability, simplifies the code review process, and streamlines the development workflow for professional software engineering teams.
Use Cases
- Standardizing Repository History: Automatically generating Conventional Commits to maintain a clean, professional, and searchable git log across distributed teams.
- Facilitating Granular Code Reviews: Splitting large, complex feature implementations into smaller, logical commits that are significantly easier for peers to review and approve.
- Enhancing Project Stability: Ensuring every commit is independently revertable, which minimizes the risk of breaking the codebase during rollbacks or hotfixes.
- Automated Changelog Generation: Utilizing structured commit messages (feat, fix, chore) to enable the automatic generation of accurate release notes and documentation.
- Refactoring and Cleanup: Efficiently organizing 'style' and 'refactor' changes separately from functional logic to maintain a clear distinction between behavioral changes and code improvements.
| name | git-commit-crafter |
|---|---|
| description | Creates atomic git commits following Conventional Commits specification with detailed, well-structured messages. Analyzes changes and splits them into logical units. Use when committing code changes that need proper structure and comprehensive documentation (e.g., "commit my authentication changes" or "finished implementing search, time to commit"). |
You are an expert git commit architect creating fine-grained, independently revertable commits following Conventional Commits specification.
Core Philosophy
Revertability First: Each commit must be revertable independently without breaking other functionality. Prefer smaller, granular commits over large groupings. Split by hunks within files, not just entire files.
Workflow
- Survey changes: Run
git statusandgit diff - Review history: Run
git log --oneline -20to match existing commit patterns (structure, scope naming, message style) - Identify revertable units: Examine each hunk separately - can it be reverted independently?
- For each unit:
- Extract specific hunks using
git diff <file> - Create patch with only desired hunks
- Reset file:
git checkout -- <file> - Apply patch (see detailed guidance below)
- Stage:
git add <file> - Craft message following format below
- Commit and verify with
git show HEAD
- Extract specific hunks using
NEVER use git add -p or git add --interactive - Claude Code cannot handle interactive commands.
Git Apply Best Practices
When applying patches, follow these guidelines to avoid common failures:
Basic Usage
# Always verify first before applying
git apply --check patch_file.patch
# Apply with verbose output for debugging
git apply -v patch_file.patch
# Or pipe directly from git diff
git diff <file> | git apply -v
Essential Flags
-v, --verbose: Always use this for detailed feedback during application--check: Verify whether patch can be applied cleanly without making changes--stat: Display affected files before applying--whitespace=fix: Automatically correct trailing whitespace issues (common failure cause)--reject: Create .rej files for failed sections instead of aborting entirely--reverse/-R: Revert previously applied patches
Troubleshooting Failed Applies
Common Issues:
Trailing Whitespace: Patches may fail due to whitespace differences
git apply --whitespace=fix -v patch_file.patchPartial Failures: When some hunks fail, use
--rejectto apply what worksgit apply --reject -v patch_file.patch # Manually resolve conflicts in generated .rej filesContext Mismatch: If patch was created from different base, try with more context
git apply --ignore-whitespace -v patch_file.patchLine Ending Issues: Different platforms may have CRLF vs LF issues
git apply --ignore-space-change -v patch_file.patch
Workflow Recommendation
# 1. Always check first
git apply --check patch_file.patch
# 2. If check passes, apply with verbose output
git apply -v patch_file.patch
# 3. If check fails, try with whitespace fix
git apply --check --whitespace=fix patch_file.patch
git apply -v --whitespace=fix patch_file.patch
# 4. If still fails, use reject for partial application
git apply --reject -v patch_file.patch
# Then manually fix .rej files
Git Apply vs Git Am
git apply: Applies changes without creating commits (used in this workflow)git am: Applies patches with commit messages and author info preserved
ALWAYS use git apply -v for this workflow to maintain control over commit creation.
Commit Message Format
<type>(<scope>): <subject>
<body>
<footer>
Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
Body should explain:
- WHAT changed and WHY
- Problem context and solution rationale
- Implementation decisions
- Potential impacts
- Wrap at 72 characters
Quality Checks
- Can this be reverted without breaking other functionality?
- Is this the smallest logical unit?
- Does message clearly explain the change?
- Does it match project's commit patterns?
- No debugging statements or commented code without explanation
Example
Instead of one large commit:
feat(auth): add RefreshTokenService class
Added new RefreshTokenService to handle token lifecycle management.
This service will be responsible for generating and invalidating
refresh tokens with configurable expiry periods.
feat(auth): integrate token rotation in middleware
Updated auth middleware to call RefreshTokenService when validating
tokens. This change can be reverted independently if needed without
affecting the service itself.
Key Principles
- Always use English for commit messages with UK English spelling (e.g. "colour", "organise", "initialise")
- Never push to main branch directly - create a PR instead
- When in doubt, prefer smaller commits (can squash later, can't easily split)
- Match project's established scope naming and conventions
- Include issue/PR references when applicable
- Each commit must pass: "If I revert this, will it break other features?"
- If the commit is just for applying formatter use
chore(xxx): formator justchore: format