Claude Code Plugins

Community-maintained marketplace

Feedback

Analyze staged changes and create meaningful git commits with appropriate commit messages following conventional commit standards. Automatically groups changes into logical units and presents multiple commit options (single vs. multiple commits) before execution. Always waits for user confirmation.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name git-committer
description Analyze staged changes and create meaningful git commits with appropriate commit messages following conventional commit standards. Automatically groups changes into logical units and presents multiple commit options (single vs. multiple commits) before execution. Always waits for user confirmation.

Git Committer

Analyze staged and unstaged changes, generate meaningful commit messages following conventional commit standards, and create git commits with proper formatting.

Key Features:

  • ๐Ÿ” Automatically analyzes changes and groups them into logical units
  • ๐Ÿ“Š Always presents multiple commit options (single vs. multiple commits)
  • โธ๏ธ Waits for user confirmation before executing any commits
  • ๐Ÿ“ Follows Conventional Commit standards
  • ๐ŸŽจ Adapts to project's existing commit style and language

When to Use This Skill

Use this skill when:

  • User asks to "commit changes", "make a commit", "git commit", "์ปค๋ฐ‹ํ•ด์ค˜"
  • You've completed a feature or bug fix and need to commit
  • User wants to review what will be committed before committing
  • You need to create a well-formatted commit message

IMPORTANT: This skill ALWAYS asks for user confirmation before creating commits. It will:

  1. Analyze all changes
  2. Group them into logical units
  3. Present multiple commit strategies (single vs. multiple)
  4. Wait for user to choose
  5. Execute the chosen strategy

Core Workflow

Step 1: Analyze Current Git Status

CRITICAL: Always check for submodules first

Check for submodules:

# Check if submodules exist
git submodule status
ls -la .gitmodules 2>/dev/null

# If submodules exist, check their status
git submodule foreach 'git status'

Check main repository status:

git status
git diff --staged
git diff

Gather information about:

  • Submodules with changes (MUST be committed first)
  • Staged files (what will be committed)
  • Unstaged changes (what won't be committed)
  • Untracked files
  • Current branch name

If submodules have changes:

  • Identify which submodules have uncommitted changes
  • Identify which submodules have new commits (not yet committed in parent)
  • These MUST be handled before committing the parent repository

Step 2: Review Recent Commits

Check commit history for style consistency:

git log --oneline -10
git log -1 --format='%B'

Identify:

  • Commit message format (conventional commits, custom format, etc.)
  • Typical message length and style
  • Use of prefixes/tags (feat:, fix:, chore:, etc.)
  • Language preference (English, Korean, etc.)

Step 3: Analyze Changes and Group by Logical Units

CRITICAL: Always analyze if changes should be split into multiple commits

Understand the nature of changes:

  • New feature addition
  • Bug fix
  • Refactoring
  • Documentation update
  • Test additions
  • Configuration changes
  • Dependency updates

Group changes by logical units:

Analyze all changed files and group them into logical units. Each unit should:

  • Have a single, clear purpose
  • Be independently understandable
  • Represent one type of change (feat, fix, refactor, etc.)

Example groupings:

Group 1 (feat): New login feature
- src/pages/LoginPage.tsx
- src/hooks/useAuth.ts
- src/routes.tsx

Group 2 (test): Login feature tests
- tests/LoginPage.test.tsx
- tests/useAuth.test.ts

Group 3 (docs): Update authentication documentation
- docs/authentication.md
- README.md

Important considerations:

  • Check for sensitive files (.env, credentials, secrets)
  • Ensure tests pass (if applicable)
  • Check for console.log or debug code
  • Identify if changes can be logically separated into multiple commits
  • Look for different types (feat + fix), different scopes (auth + ui), or different concerns

Step 4: Determine Commit Strategy

IMPORTANT: Always present commit options to the user before executing

CRITICAL: Check for submodule changes first

If submodules have changes:

  • Separate submodule commits from parent repository commits
  • Submodules are ALWAYS committed first
  • Parent repository commit includes submodule reference update

Single commit criteria:

  • All changes are tightly coupled
  • Changes represent one atomic unit
  • Separating would break functionality

Multiple commits criteria:

  • Changes span different features/modules
  • Mix of different types (feat + fix + refactor)
  • Tests can be separated from implementation
  • Documentation updates are substantial
  • Mix of related but independent changes
  • Submodule changes vs. parent repository changes

Always ask the user:

If changes can be split, present options like:

## ๐Ÿ“‹ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ถ„์„

**๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋“ค์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:**

### ์˜ต์…˜ A: ๋‹จ์ผ ์ปค๋ฐ‹ (๋น ๋ฅธ ๋ฐฉ๋ฒ•)

feat(auth): implement login feature with tests and docs

  • Add LoginPage component
  • Create useAuth hook
  • Update routes configuration
  • Add tests for login functionality
  • Update authentication documentation

### ์˜ต์…˜ B: 3๊ฐœ์˜ ์ปค๋ฐ‹์œผ๋กœ ๋ถ„๋ฆฌ (๊ถŒ์žฅ)

**์ปค๋ฐ‹ 1:**

feat(auth): implement login page and authentication hook

ํŒŒ์ผ: LoginPage.tsx, useAuth.ts, routes.tsx

**์ปค๋ฐ‹ 2:**

test(auth): add tests for login functionality

ํŒŒ์ผ: LoginPage.test.tsx, useAuth.test.ts

**์ปค๋ฐ‹ 3:**

docs(auth): update authentication documentation

ํŒŒ์ผ: authentication.md, README.md

### ์˜ต์…˜ C: ์ปค์Šคํ…€
์ง์ ‘ ์ปค๋ฐ‹์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆŒ์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

---
์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ• ๊นŒ์š”? (A/B/C)

Wait for user response before proceeding

Step 5: Generate Commit Messages

Follow conventional commit format:

<type>(<scope>): <subject>

<body>

<footer>

Types:

  • feat: New feature
  • fix: Bug fix
  • docs: Documentation changes
  • style: Code style changes (formatting, missing semicolons, etc.)
  • refactor: Code refactoring
  • test: Adding or modifying tests
  • chore: Maintenance tasks, dependency updates
  • perf: Performance improvements
  • ci: CI/CD changes
  • build: Build system changes

Guidelines:

  • Subject line: 50 characters or less, imperative mood
  • Body: Explain the "why" not the "what" (optional)
  • Footer: Reference issues, breaking changes (optional)
  • Use consistent language with project history
  • Be specific and descriptive

Step 6: Handle Submodules First (If Applicable)

CRITICAL: If submodules have changes, handle them BEFORE committing parent repository

Submodule Workflow:

1. Identify submodules with changes:

# Check each submodule
git submodule foreach 'git status --short'

2. For each submodule with changes, present commit options:

## ๐Ÿ”— ์„œ๋ธŒ๋ชจ๋“ˆ ์ปค๋ฐ‹ ํ•„์š”

**.claude/skills ์„œ๋ธŒ๋ชจ๋“ˆ**์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋จผ์ € ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ปค๋ฐ‹ํ•œ ํ›„, ๋ฃจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ปค๋ฐ‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

### ์„œ๋ธŒ๋ชจ๋“ˆ ๋ณ€๊ฒฝ์‚ฌํ•ญ:

- .claude/skills/git-committer/SKILL.md (new)

**์„œ๋ธŒ๋ชจ๋“ˆ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€:**

feat: add git-committer skill

Add new git-committer skill that analyzes changes and creates meaningful commits with conventional commit standards. Supports multiple commit strategies and submodule handling.


---
์ด ๋‚ด์šฉ์œผ๋กœ ์„œ๋ธŒ๋ชจ๋“ˆ์„ ๋จผ์ € ์ปค๋ฐ‹ํ• ๊นŒ์š”? (Y/n)

3. Execute submodule commits:

# Navigate to submodule and commit
cd .claude/skills
git add git-committer/SKILL.md
git commit -m "feat: add git-committer skill" -m "Add new git-committer skill that analyzes changes and creates meaningful commits with conventional commit standards. Supports multiple commit strategies and submodule handling."

# Return to root
cd ../..

# Update parent repository to reference new submodule commit
git add .claude/skills

4. Notify user:

โœ… ์„œ๋ธŒ๋ชจ๋“ˆ ์ปค๋ฐ‹ ์™„๋ฃŒ

**.claude/skills** ์„œ๋ธŒ๋ชจ๋“ˆ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ปค๋ฐ‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋ฃจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ปค๋ฐ‹ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฃจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—๋Š” ์„œ๋ธŒ๋ชจ๋“ˆ ์ฐธ์กฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

5. Continue to Step 7 for parent repository commit

Step 7: Execute Parent Repository Commits Based on User Choice

IMPORTANT: Only execute after user confirms the commit strategy

Note: If submodules were committed in Step 6, ensure the parent commit includes the submodule reference update.

For Single Commit (Option A):

# Stage all relevant files
git add <files>

# Create the commit
git commit -m "feat(auth): implement login feature with tests and docs" -m "- Add LoginPage component
- Create useAuth hook
- Update routes configuration
- Add tests for login functionality
- Update authentication documentation"

# Verify
git log -1 --stat

For Multiple Commits (Option B):

Execute commits sequentially:

# Commit 1: Implementation
git add src/pages/LoginPage.tsx src/hooks/useAuth.ts src/routes.tsx
git commit -m "feat(auth): implement login page and authentication hook" -m "Add LoginPage component with email/password form and useAuth hook for authentication state management. Update routes to include new login page."

# Commit 2: Tests
git add tests/LoginPage.test.tsx tests/useAuth.test.ts
git commit -m "test(auth): add tests for login functionality" -m "Add comprehensive tests for LoginPage component and useAuth hook covering success and error scenarios."

# Commit 3: Documentation
git add docs/authentication.md README.md
git commit -m "docs(auth): update authentication documentation" -m "Document new login feature, authentication flow, and usage examples."

# Verify all commits
git log -3 --oneline

For Custom Split (Option C):

Follow user's instructions for grouping files and creating commits.

Step 7: Verify and Report

After completing commit(s), show summary:

## โœ… ์ปค๋ฐ‹ ์™„๋ฃŒ

**์ƒ์„ฑ๋œ ์ปค๋ฐ‹:**

- abc1234 feat(auth): implement login page and authentication hook
- def5678 test(auth): add tests for login functionality
- ghi9012 docs(auth): update authentication documentation

**๋‹ค์Œ ๋‹จ๊ณ„:**

- [ ] ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ•„์š”ํ•œ๊ฐ€์š”?
- [ ] ์›๊ฒฉ ์ €์žฅ์†Œ์— pushํ• ๊นŒ์š”?
- [ ] PR์„ ์ƒ์„ฑํ• ๊นŒ์š”?

Important notes:

  • NEVER commit sensitive files (.env, credentials, secrets)
  • NEVER skip pre-commit hooks unless explicitly requested
  • NEVER amend commits from other developers
  • ALWAYS verify the commit was created successfully
  • ALWAYS wait for user confirmation before executing commits

Special Cases

Multiple Logical Changes

This is now handled automatically in Step 3 and Step 4.

The skill will always analyze and present multiple commit options when applicable. This section is kept for reference on how to handle edge cases.

Pre-commit Hook Failures

If pre-commit hooks modify files:

# Check if it's safe to amend
git log -1 --format='%an %ae'
git status

# If the last commit is yours and not pushed
git add .
git commit --amend --no-edit -m "$(git log -1 --format='%B')"

# Otherwise create a new commit
git add .
git commit -m "chore: apply pre-commit hook changes"

Empty Changes

If no changes to commit:

ํ˜„์žฌ ์ปค๋ฐ‹ํ•  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

**Git Status:**

- Staged files: 0
- Unstaged changes: 0
- Untracked files: [list if any]

๋‹ค์Œ ์ค‘ ์„ ํƒํ•ด์ฃผ์„ธ์š”:
A) Untracked ํŒŒ์ผ์„ stageํ•˜๊ณ  ์ปค๋ฐ‹
B) ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์ƒํƒœ ํ™•์ธ
C) ์ทจ์†Œ

Examples

Example 1: Feature Addition

User: "์ปค๋ฐ‹ํ•ด์ค˜"

Analysis:

$ git status
On branch feature/login
Changes to be committed:
  new file:   src/pages/LoginPage.tsx
  new file:   src/hooks/useAuth.ts
  modified:   src/routes.tsx

$ git log --oneline -5
abc1234 feat: ์œ ์ € ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ์ถ”๊ฐ€
def5678 fix: ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฒ„๊ทธ ์ˆ˜์ •
ghi9012 refactor: API ํด๋ผ์ด์–ธํŠธ ๋ณต์žก๋„ ํ•ด์†Œ

Output:

## ๐Ÿ“‹ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ถ„์„

**๋ณ€๊ฒฝ๋œ ํŒŒ์ผ:**

- src/pages/LoginPage.tsx (new)
- src/hooks/useAuth.ts (new)
- src/routes.tsx (modified)

**๋ถ„์„ ๊ฒฐ๊ณผ:**

- โœ… ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ธ์ฆ ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ๋จ
- โœ… ๋ฏผ๊ฐํ•œ ํŒŒ์ผ ์—†์Œ
- โœ… ํ”„๋กœ์ ํŠธ ์ปค๋ฐ‹ ์Šคํƒ€์ผ ์ค€์ˆ˜ (ํ•œ๊ธ€)

### ์˜ต์…˜ A: ๋‹จ์ผ ์ปค๋ฐ‹ (๊ถŒ์žฅ)

feat(auth): ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ฐ ์ธ์ฆ ํ›… ๊ตฌํ˜„

์ด๋ฉ”์ผ/๋น„๋ฐ€๋ฒˆํ˜ธ ํผ์ด ์žˆ๋Š” LoginPage ์ปดํฌ๋„ŒํŠธ์™€ ์ธ์ฆ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ useAuth ํ›…์„ ์ถ”๊ฐ€. ์ƒˆ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ํฌํ•จํ•˜๋„๋ก ๋ผ์šฐํŠธ ์—…๋ฐ์ดํŠธ.


---
์ด ๋‚ด์šฉ์œผ๋กœ ์ปค๋ฐ‹ํ• ๊นŒ์š”? (Y/n)

Example 2: Bug Fix

Git diff shows:

- if (user.age > 18) {
+ if (user.age >= 18) {

Proposed message:

fix(validation): correct age verification logic

Change age check from > to >= to properly include 18-year-olds
in adult verification. Fixes issue where 18-year-olds were
incorrectly rejected.

Fixes #123

Example 3: Multiple Logical Units (Multiple Commits Recommended)

User: "์ปค๋ฐ‹ํ•ด์ค˜"

Analysis:

$ git status
Changes to be committed:
  modified:   src/api/rateLimit.ts
  new file:   tests/rateLimit.test.ts
  modified:   docs/api.md
  modified:   README.md
  new file:   config/rateLimit.config.ts

Output:

## ๐Ÿ“‹ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ถ„์„

**๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋“ค์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:**

### ๊ทธ๋ฃน 1 (feat): Rate limiting ๊ตฌํ˜„

- src/api/rateLimit.ts
- config/rateLimit.config.ts

### ๊ทธ๋ฃน 2 (test): Rate limiting ํ…Œ์ŠคํŠธ

- tests/rateLimit.test.ts

### ๊ทธ๋ฃน 3 (docs): API ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ

- docs/api.md
- README.md

---

### ์˜ต์…˜ A: ๋‹จ์ผ ์ปค๋ฐ‹ (๋น ๋ฅธ ๋ฐฉ๋ฒ•)

feat(api): rate limiting ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (ํ…Œ์ŠคํŠธ ๋ฐ ๋ฌธ์„œ ํฌํ•จ)

express-rate-limit๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ rate limiting ๋ฏธ๋“ค์›จ์–ด ๊ตฌํ˜„. ์—”๋“œํฌ์ธํŠธ๋ณ„ ๋‹ค๋ฅธ ์ œํ•œ์„ ์ง€์›ํ•˜๋Š” ์„ค์ • ์ถ”๊ฐ€. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ, ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋ฐ API ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ ํฌํ•จ.


### ์˜ต์…˜ B: 3๊ฐœ์˜ ์ปค๋ฐ‹์œผ๋กœ ๋ถ„๋ฆฌ (๊ถŒ์žฅ) โญ

**์ปค๋ฐ‹ 1:**

feat(api): rate limiting ๋ฏธ๋“ค์›จ์–ด ๊ตฌํ˜„

express-rate-limit๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ rate limiting ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€. ์—”๋“œํฌ์ธํŠธ๋ณ„๋กœ ๋‹ค๋ฅธ ์ œํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ • ํŒŒ์ผ ํฌํ•จ.

ํŒŒ์ผ: src/api/rateLimit.ts, config/rateLimit.config.ts

**์ปค๋ฐ‹ 2:**

test(api): rate limiting ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

rate limiting ๋ฏธ๋“ค์›จ์–ด์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€. ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค (์ œํ•œ ์ดˆ๊ณผ, ์ •์ƒ ์š”์ฒญ ๋“ฑ) ์ปค๋ฒ„.

ํŒŒ์ผ: tests/rateLimit.test.ts

**์ปค๋ฐ‹ 3:**

docs(api): rate limiting ์„ค์ • ๋ฌธ์„œํ™”

์ƒˆ๋กœ์šด rate limiting ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ฌธ์„œ ์ถ”๊ฐ€. ์„ค์ • ๋ฐฉ๋ฒ•, ์‚ฌ์šฉ ์˜ˆ์ œ, ์ œํ•œ ์ •์ฑ… ์„ค๋ช… ํฌํ•จ.

ํŒŒ์ผ: docs/api.md, README.md

### ์˜ต์…˜ C: ์ปค์Šคํ…€
์ง์ ‘ ์ปค๋ฐ‹์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆŒ์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

---
์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ• ๊นŒ์š”? (A/B/C)

Example 4: With Submodules (Submodule First, Then Parent)

User: "์ปค๋ฐ‹ํ•ด์ค˜"

Analysis:

$ git submodule status
+abc1234 .claude/skills (heads/main)

$ git status
Changes to be committed:
  renamed:    .claude/claude-skills -> .claude/skills
  modified:   .gitmodules

Changes not staged for commit:
  modified:   .claude/skills (new commits, untracked content)

$ cd .claude/skills && git status
On branch main
Untracked files:
  git-committer/SKILL.md

Output:

## ๐Ÿ“‹ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ถ„์„

### ๐Ÿ”— ์„œ๋ธŒ๋ชจ๋“ˆ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ฐ์ง€

**.claude/skills ์„œ๋ธŒ๋ชจ๋“ˆ**์— ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
**๋จผ์ € ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ปค๋ฐ‹ํ•œ ํ›„**, ๋ฃจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ปค๋ฐ‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

---

## 1๋‹จ๊ณ„: ์„œ๋ธŒ๋ชจ๋“ˆ ์ปค๋ฐ‹ (.claude/skills)

**์„œ๋ธŒ๋ชจ๋“ˆ ๋ณ€๊ฒฝ์‚ฌํ•ญ:**

- git-committer/SKILL.md (new)

**์ œ์•ˆ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€:**

feat: add git-committer skill with submodule support

Add git-committer skill that analyzes changes and creates meaningful commits following conventional commit standards. Includes automatic grouping into logical units, multiple commit strategies, and submodule-first commit workflow.


---
์ด ๋‚ด์šฉ์œผ๋กœ ์„œ๋ธŒ๋ชจ๋“ˆ์„ ๋จผ์ € ์ปค๋ฐ‹ํ• ๊นŒ์š”? (Y/n)

---

## 2๋‹จ๊ณ„: ๋ฃจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ปค๋ฐ‹

**์„œ๋ธŒ๋ชจ๋“ˆ ์ปค๋ฐ‹ ํ›„ ์ง„ํ–‰๋  ๋‚ด์šฉ:**

**๋ฃจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ:**
- .claude/claude-skills โ†’ .claude/skills (renamed)
- .gitmodules (modified)
- .claude/skills (submodule reference update)

**์ œ์•ˆ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€:**

chore: migrate claude-skills to skills directory

Rename .claude/claude-skills to .claude/skills for better naming consistency. Update .gitmodules and submodule reference.


---
(์„œ๋ธŒ๋ชจ๋“ˆ ์ปค๋ฐ‹ ์™„๋ฃŒ ํ›„ ์ž๋™์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค)

Execution Flow:

# Step 1: Commit submodule
cd .claude/skills
git add git-committer/SKILL.md
git commit -m "feat: add git-committer skill with submodule support"
cd ../..

# Step 2: Update parent to reference new submodule commit
git add .claude/skills

# Step 3: Commit parent repository
git add .gitmodules
git commit -m "chore: migrate claude-skills to skills directory"

# Verify
git log -2 --oneline
git submodule status

Best Practices

DO โœ…

  • Always check for submodules first and commit them before parent
  • Always review changes before committing
  • Follow the project's existing commit message style
  • Keep commits atomic (one logical change per commit)
  • Write clear, descriptive messages
  • Include issue/ticket references when applicable
  • Verify tests pass before committing
  • Check for and warn about sensitive files
  • Separate submodule commits from parent repository commits
  • Update parent repository to reference new submodule commits

DON'T โŒ

  • Don't commit parent repository before committing submodules
  • Don't commit unrelated changes together
  • Don't use vague messages like "update" or "fix stuff"
  • Don't commit sensitive information
  • Don't skip hooks without user permission
  • Don't amend other developers' commits
  • Don't commit non-working code
  • Don't batch multiple logical changes unnecessarily
  • Don't forget to update submodule references in parent repository

Configuration

Custom Commit Templates

If project has a custom commit template:

git config --get commit.template

Use the template format if it exists.

Commit Message Language

Follow the project's language preference:

  • Check recent commits for language consistency
  • Ask user if unclear: "์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ• ๊นŒ์š”, ์˜์–ด๋กœ ์ž‘์„ฑํ• ๊นŒ์š”?"

Sign-off Requirements

Some projects require sign-off:

git commit -s -m "message"

Check project's CONTRIBUTING.md for requirements.

Integration with Development Workflow

Before Committing

  1. โœ… Check for submodules (git submodule status)
  2. โœ… Run tests (if applicable)
  3. โœ… Run linter/formatter
  4. โœ… Review all changes
  5. โœ… Remove debug code
  6. โœ… Update documentation if needed

After Committing

  1. Show commit details: git show --stat
  2. Confirm next steps:
    • Push to remote?
    • Create pull request?
    • Continue development?

Error Handling

Common Issues and Solutions

Merge conflicts:

โš ๏ธ ํ˜„์žฌ merge conflict๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋จผ์ € conflict๋ฅผ ํ•ด๊ฒฐํ•œ ํ›„์— ์ปค๋ฐ‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Conflicted files:

- src/App.tsx

๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•˜์„ธ์š”:
$ git status
$ git diff

Detached HEAD:

โš ๏ธ Detached HEAD ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ฒดํฌ์•„์›ƒํ•˜์„ธ์š”.

$ git checkout -b new-branch-name
๋˜๋Š”
$ git checkout existing-branch

Nothing to commit:

โ„น๏ธ ์ปค๋ฐ‹ํ•  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.
๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ด๋ฏธ ์ปค๋ฐ‹๋˜์—ˆ๊ฑฐ๋‚˜ stage๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

Submodule not initialized:

โš ๏ธ ์„œ๋ธŒ๋ชจ๋“ˆ์ด ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•˜์„ธ์š”:
$ git submodule init
$ git submodule update

Submodule has unpushed commits:

โš ๏ธ ์„œ๋ธŒ๋ชจ๋“ˆ์— ํ‘ธ์‹œ๋˜์ง€ ์•Š์€ ์ปค๋ฐ‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ธŒ๋ชจ๋“ˆ ์ปค๋ฐ‹์„ ์›๊ฒฉ์— ํ‘ธ์‹œํ•œ ํ›„ ๋ถ€๋ชจ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ์„œ๋ธŒ๋ชจ๋“ˆ ์ปค๋ฐ‹์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ต์…˜:
A) ์„œ๋ธŒ๋ชจ๋“ˆ์„ ์›๊ฒฉ์— ํ‘ธ์‹œํ•˜๊ณ  ๋ถ€๋ชจ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ปค๋ฐ‹
B) ๋กœ์ปฌ์—๋งŒ ์ปค๋ฐ‹ (๋‚˜์ค‘์— ํ‘ธ์‹œ)

์–ด๋–ป๊ฒŒ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (A/B)

Submodule detached HEAD:

โš ๏ธ ์„œ๋ธŒ๋ชจ๋“ˆ์ด Detached HEAD ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์„œ๋ธŒ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ cd .claude/skills
$ git checkout -b feature/new-skill
๋˜๋Š”
$ git checkout main

Summary

This skill helps create meaningful, well-formatted git commits by:

  1. Checking for submodules first and handling them before parent repository
  2. Analyzing current changes thoroughly and grouping into logical units
  3. Presenting multiple commit strategies (single vs. multiple commits)
  4. Following project conventions and commit message standards
  5. Generating descriptive commit messages with Conventional Commit format
  6. Ensuring code quality and safety (no sensitive files, proper validation)
  7. Waiting for user confirmation before executing any commits
  8. Providing clear feedback and next steps to users

Commit Order:

  1. Submodules (if any changes)
  2. Parent repository (including submodule reference updates)

Always prioritize code quality, security, clear communication, and proper submodule handling throughout the commit process.