Use when adding new error messages to React, or seeing "unknown error code" warnings.
npx skills add dibenkobit/skills --skill "atomic-commits"
Install specific skill from multi-skill repository
# Description
Split staged git changes into logical atomic commits. Use when asked to "commit atomically", "split my changes", "make atomic commits", or "create separate commits".
# SKILL.md
name: atomic-commits
description: Split staged git changes into logical atomic commits. Use when asked to "commit atomically", "split my changes", "make atomic commits", or "create separate commits".
author: dibenkobit
version: 1.0.0
license: MIT
Atomic Commits
Split staged changes into multiple logical commits. Each commit does ONE thing.
Priority Order (for format, language, types, scopes — everything)
- User's explicit instructions — always wins
- Project config — .commitlintrc*, .czrc, .babygit.json
- Recent commits — match style from
git log --oneline -10 - Defaults — Conventional Commits, English
How It Works
1. Check prerequisites
git diff --cached --name-only
- 0 files? → Tell user "Nothing staged. Run
git addfirst." - 1 file? → Ask: "Only one file staged. Want a single commit or split by hunks?"
2. Detect conventions
Check for config: ls .commitlintrc* .czrc .babygit.json 2>/dev/null
If found → read and extract types, scopes, format rules.
If not → analyze git log --oneline -10 for patterns.
3. Get diffs and think about grouping
For each file: git diff --cached -- <file>
Reasoning for grouping:
- Same feature/module? → together (auth.ts + auth.types.ts)
- Test + implementation? → together (utils.ts + utils.test.ts)
- Unrelated purpose? → separate (feature vs deps vs docs)
- Config/deps changes? → usually separate commit
Ask yourself: "If I need to revert just THIS change, can I do it with one commit?"
4. Validate before showing
- Every staged file in exactly one group? ✓
- No file in multiple groups? ✓
- Commit messages match detected format? ✓
5. Show and confirm
Proposed commits (3):
1. feat(auth): implement OAuth2 flow
└─ src/auth/oauth.ts, src/auth/types.ts
2. feat(ui): add login button
└─ components/LoginButton.tsx
3. chore(deps): update dependencies
└─ package.json, bun.lock
[Y]es / [E]dit / [C]ancel?
On Edit → let user reassign files or change messages.
On Cancel → stop, leave everything staged as-is.
6. Execute commits
For each group in order:
git stash push -q # Save current state
git reset HEAD . -q # Unstage all
git add <files-in-group> # Stage this group only
git commit -m "<message>" # Commit
After all groups done:
git stash pop -q 2>/dev/null || true # Restore if anything left
If any commit fails → stop, show error, don't continue.
Edge Cases
| Situation | Action |
|---|---|
| No staged files | Tell user, stop |
| 1 file only | Ask if split by hunks or single commit |
| Binary files | Include in commits, skip diff analysis |
| Pre-commit hooks | Warn user they will run |
| Commit fails | Stop immediately, show error |
| User wants to edit | Allow reassigning files between groups |
Commit Message Format
Default (Conventional Commits):
<type>(<scope>): <description>
- detail 1
- detail 2
Types: feat fix refactor chore docs test style perf ci build
Adapt format based on Priority Order above.
Example with User Override
User: "commit atomically, use gitmoji, write in russian"
Staged: auth.ts, auth.test.ts, package.json
Output:
1. ✨ добавить OAuth2 аутентификацию
└─ auth.ts, auth.test.ts
2. ⬆️ обновить зависимости
└─ package.json
User instruction (gitmoji + russian) overrides any project config.
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
| Pre-commit hook fails | Linting/formatting errors | Fix the issue, re-stage, create NEW commit (don't amend) |
| Stash conflict | Uncommitted changes conflict with stash | Resolve manually with git stash show -p \| git apply |
| "Nothing to commit" | All files already committed | Check git status, ensure files are staged |
| Permission denied | No write access | Check file permissions, repository ownership |
| Commit partially applied | Script interrupted mid-execution | Run git stash pop to recover, start over |
Present Results to User
When presenting the commit plan, use this format:
Proposed commits ({N}):
1. {type}({scope}): {description}
└─ {file1}, {file2}
2. {type}({scope}): {description}
└─ {file1}
...
[Y]es to commit all / [E]dit to modify / [C]ancel
After successful execution:
✓ Created {N} commits:
• {hash1} {message1}
• {hash2} {message2}
On failure, stop immediately and show which commit failed and why.
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.