npx claudepluginhub bae-changhyun/cc-plugins-bch --plugin gitwfWant just this skill?
Add to a custom plugin, then install with one command.
MUST use this skill when user asks to commit, create commit, save work, or mentions "컀λ°". This skill OVERRIDES default git commit behavior. Creates commits following Conventional Commits format with emoji + type/scope/subject (β¨ feat, π fix, β»οΈ refactor, etc).
This skill uses the workspace's default tool permissions.
Git Commit Guide
Creates commits using the Conventional Commits format with type, scope, and subject components.
Quick Start
# 1. Check project conventions
cat CLAUDE.md 2>/dev/null | head -30
# 2. Review staged changes
git diff --staged --stat
git diff --staged
# 3. Stage files if needed
git add <files>
# 4. Create commit with emoji
git commit -m "β¨ feat(scope): add new feature"
Commit Structure
Format: emoji type(scope): subject
| Component | Description | Example |
|---|---|---|
| emoji | Visual indicator | β¨, π, β»οΈ |
| type | Change category | feat, fix, refactor |
| scope | Affected area (kebab-case) | auth, api-client |
| subject | What changed (imperative mood) | add login validation |
Rules:
- First line β€ 72 characters
- Use imperative mood ("add", not "added" or "adding")
- No period at end
Commit Types with Emoji
Core Types
| Emoji | Type | Purpose |
|---|---|---|
| β¨ | feat | New feature |
| π | fix | Bug fix |
| π | docs | Documentation |
| π | style | Formatting/style (no logic change) |
| β»οΈ | refactor | Code refactoring |
| β‘οΈ | perf | Performance improvement |
| β | test | Add/update tests |
| π§ | chore | Tooling, config |
| π | ci | CI/CD improvements |
| βͺοΈ | revert | Revert changes |
Detailed Types
Features (feat):
| Emoji | Usage |
|---|---|
| π§΅ | Multithreading/concurrency |
| ποΈ | SEO improvements |
| π·οΈ | Add/update types |
| π¬ | Text and literals |
| π | Internationalization/localization |
| π | Business logic |
| π± | Responsive design |
| πΈ | UX/usability improvements |
| π | Analytics/tracking |
| π© | Feature flags |
| π« | Animations/transitions |
| βΏοΈ | Accessibility |
| π¦Ί | Validation |
| π | Add/update logs |
| π₯ | Easter eggs |
| π₯ | Breaking changes |
| βοΈ | Offline support |
Fixes (fix):
| Emoji | Usage |
|---|---|
| π¨ | Compiler/linter warnings |
| ποΈ | Security issues |
| π©Ή | Simple fix for non-critical issue |
| π₯ | Catch errors |
| π½οΈ | External API changes |
| π₯ | Remove code/files |
| ποΈ | Critical hotfix |
| βοΈ | Typos |
| π | CI build |
| π | Remove logs |
Refactor:
| Emoji | Usage |
|---|---|
| π | Move/rename resources |
| ποΈ | Architectural changes |
| π¨ | Improve structure/format |
| β°οΈ | Remove dead code |
Chore:
| Emoji | Usage |
|---|---|
| π₯ | Add/update contributors |
| π | Merge branches |
| π¦οΈ | Compiled files/packages |
| β | Add dependency |
| β | Remove dependency |
| π± | Seed files |
| π§βπ» | Developer experience |
| π | .gitignore |
| π | Pin dependencies |
| π· | CI build system |
| π | License |
| π | Begin project |
| π | Release/version tags |
| π§ | Work in progress |
Database/Assets:
| Emoji | Usage |
|---|---|
| ποΈ | Database changes |
| π± | Assets |
Test:
| Emoji | Usage |
|---|---|
| π§ͺ | Add failing test |
| π€‘ | Mock things |
| πΈ | Snapshots |
| βοΈ | Experiments |
Commit Scope (Logical Atomicity)
MUST FOLLOW: Do not commit per file. Commit per feature unit.
- Principle: If you modified
main.py,utils.py,config.yamlto develop Feature A, these 3 files MUST be in a single commit. - Reason: When reverting to a specific commit, that feature should work completely.
β Bad Example (νμΌλ³λ‘ λΆλ¦¬ μ»€λ° - κΈ°λ₯ λ¨μκ° μλ)
git add search.py
git commit -m "β¨ feat: create search module"
git add api.py
git commit -m "π fix: fix api connection"
β Good Example
git add search.py api.py
git commit -m "β¨ feat(search): implement keyword search with API endpoint"
Result-Oriented Messages
MUST FOLLOW: Do not write conversation history (process). Write only the final code changes (result).
Even if there were 10 modifications during development (error fixes, typo fixes, etc.), the commit message should only state the finally implemented feature.
| β Bad (Process) | β Good (Result) |
|---|---|
| "Fixed typo, fixed A function error, added library to implement login" | β¨ feat(auth): implement JWT-based login |
| "fix api connection and variable name errors and import errors" | β¨ feat(search): implement keyword search |
Core Workflow
1. Check Project Conventions
cat CLAUDE.md 2>/dev/null | head -30
Always check for project-specific commit rules.
2. Review Staged Changes
git diff --staged --stat
git diff --staged
Understand what's being committed.
3. Analyze Changes
Identify:
- Primary type (feat > fix > refactor)
- Scope (module/component affected)
- Summary (what changed, in imperative mood)
4. Create Commit
git commit -m "emoji type(scope): subject"
# Example: git commit -m "β¨ feat(auth): add login validation"
5. Add Body (if needed)
For complex changes:
git commit -m "$(cat <<'EOF'
β¨ feat(scope): subject
Body explaining WHY and HOW.
Wrap at 72 characters.
Refs: #123
EOF
)"
Breaking Changes
Add exclamation mark (!) after type/scope for breaking changes:
git commit -m "π₯ feat(api)!: change response format"
Or use footer:
git commit -m "$(cat <<'EOF'
π₯ feat(api): change response format
BREAKING CHANGE: Response now returns array instead of object.
EOF
)"
Subject Line Rules
- DO: Use imperative mood ("add", "fix", "change")
- DO: Keep under 50 characters
- DO: Start lowercase after colon
- DON'T: End with period
- DON'T: Use vague words ("update", "improve", "change stuff")
Review Fix Commits
When addressing PR review comments:
git commit -m "$(cat <<'EOF'
π fix(scope): address review comment #ID
Brief explanation of what was wrong and how it's fixed.
Addresses review comment #123456789.
EOF
)"
Commit Split Guidelines
When analyzing diffs, consider splitting commits based on:
| Criteria | Description |
|---|---|
| Different concerns | Changes to unrelated parts of codebase |
| Change types | Feature vs bug fix vs refactoring |
| File patterns | Source code vs documentation vs config |
| Logical grouping | Changes easier to review separately |
| Size | Very large changes that benefit from granularity |
Split Example:
1st: β¨ feat: add new solc version type definitions
2nd: π docs: update documentation for new solc version
3rd: π§ chore: update package.json dependencies
4th: π·οΈ feat: add type definitions for new API endpoints
5th: π§΅ feat: improve worker thread concurrency handling
6th: π¨ fix: resolve linting issues in new code
7th: β
test: add unit tests for new solc version features
8th: ποΈ fix: update dependencies for security vulnerabilities
Pre-Commit Checklist
Before creating a commit, ask yourself:
- Are all related files included? (Are all dependency files modified for the feature
git added?) - Is the message clean? (Does it contain only the core implementation without repetitive "fix", "modify"?)
- Is it the diff from previous commit? (Did you summarize
git diffcontent, not conversation log?)
Good Commit Examples
β¨ feat: add user authentication system
π fix: resolve memory leak in rendering process
π docs: update API documentation with new endpoints
β»οΈ refactor: simplify error handling logic in parser
π¨ fix: resolve linter warnings in component files
π§βπ» chore: improve developer tools setup process
π feat: implement business logic for transaction validation
π©Ή fix: resolve minor style inconsistency in header
ποΈ fix: patch critical security vulnerability in auth flow
π¨ style: restructure component for better readability
π₯ fix: remove deprecated legacy code
π¦Ί feat: add input validation for user registration form
π fix: resolve CI pipeline test failures
π feat: implement tracking for user engagement analytics
ποΈ fix: strengthen authentication password requirements
βΏοΈ feat: improve form accessibility for screen readers
Language Rule
MUST FOLLOW: The commit message language should match the repository's existing commit history.
Before writing a commit message:
- Run
git log --oneline -5to check recent commit messages - Use the same language as the existing commits
- If commits are in Korean, write in Korean. If in English, write in English.
# Check recent commit language
git log --oneline -5
Examples:
- If recent commits are
"β¨ feat: λ‘κ·ΈμΈ κΈ°λ₯ μΆκ°"β Write in Korean - If recent commits are
"β¨ feat: add login feature"β Write in English
Important Rules
- ALWAYS check recent commit history to determine commit message language
- ALWAYS check project conventions (CLAUDE.md) before committing
- ALWAYS review staged changes before committing
- ALWAYS commit per feature unit, not per file
- ALWAYS write result-oriented messages (final changes only)
- ALWAYS use imperative mood in subject ("add", not "added")
- ALWAYS include appropriate emoji at the start
- ALWAYS keep first line β€ 72 characters
- ALWAYS use HEREDOC for multi-line messages
- NEVER stage secrets, credentials, or large binaries
- NEVER use vague subjects ("fix bug", "update code")
- NEVER list process steps in commit message
- NEVER end subject with period