git-committer
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:
- Analyze all changes
- Group them into logical units
- Present multiple commit strategies (single vs. multiple)
- Wait for user to choose
- 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 featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, missing semicolons, etc.)refactor: Code refactoringtest: Adding or modifying testschore: Maintenance tasks, dependency updatesperf: Performance improvementsci: CI/CD changesbuild: 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
- โ Check for submodules (git submodule status)
- โ Run tests (if applicable)
- โ Run linter/formatter
- โ Review all changes
- โ Remove debug code
- โ Update documentation if needed
After Committing
- Show commit details:
git show --stat - 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:
- Checking for submodules first and handling them before parent repository
- Analyzing current changes thoroughly and grouping into logical units
- Presenting multiple commit strategies (single vs. multiple commits)
- Following project conventions and commit message standards
- Generating descriptive commit messages with Conventional Commit format
- Ensuring code quality and safety (no sensitive files, proper validation)
- Waiting for user confirmation before executing any commits
- Providing clear feedback and next steps to users
Commit Order:
- Submodules (if any changes)
- Parent repository (including submodule reference updates)
Always prioritize code quality, security, clear communication, and proper submodule handling throughout the commit process.