Skip to content
Skill Authoring
Skill

/commit-splitter

Split large sets of uncommitted changes into logical, well-organized commits. Use when the user has many uncommitted changes and wants structured commits, or proactively suggest when detecting a large diff that would benefit from splitting.

BOOST
From plugin
sundial-org-skills
15313 skills
Install
$ npx -y skills add sundial-org/skills --skill commit-splitter --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/commit-splitter

Context preview

The summary Claude sees to decide when to auto-load this skill.

Split large sets of uncommitted changes into logical, well-organized commits. Use when the user has many uncommitted changes and wants structured commits, or proactively suggest when detecting a large diff that would benefit from splitting.

SKILL.md

commit-splitter.SKILL.md
name: commit-splitter
description: Split large sets of uncommitted changes into logical, well-organized commits. Use when the user has many uncommitted changes and wants structured commits, or proactively suggest when detecting a large diff that would benefit from splitting.

Structured Git Commits

Workflow

1. Safety stash

git stash push -m "save before structured commit: <brief description>" --include-untracked
git stash apply

Keep changes applied throughout. Do NOT re-stash between commits. Only drop the safety stash at the very end.

2. Survey and number hunks

Generate patches for all modified files and list their hunks. **Quote paths with special characters** (brackets, spaces, etc.):

git diff "<file>" > /tmp/<file>.patch
.claude/skills/commit-splitter/scripts/extract-hunks.py /tmp/<file>.patch --list

This outputs numbered hunks:

Hunks (3 total):
  1: @@ -10,6 +10,7 @@ def foo():  (+1/-0) print("perf log")...
  2: @@ -25,4 +26,6 @@ def bar():  (+2/-0) import threading...
  3: @@ -50,3 +53,4 @@ def baz():  (+1/-0) min_containers=1...

3. Propose commit plan with hunk numbers

Reference hunks by number in the plan:

modal_app.py:
  Hunk 1: perf logging
  Hunk 2: async threading
  Hunk 3: min_containers=1

Commit 1: "perf: add logging" - modal_app.py hunks 1
Commit 2: "perf: async + min_containers" - modal_app.py hunks 2,3

4. Execute commits

**CRITICAL: Follow the approved plan exactly.** Never combine commits because splitting "seems hard."

**NEVER use these shortcuts:**

  • `git checkout` to reset files then re-edit them
  • Direct file editing (Edit/Update tools) on source files
  • Combining commits because changes are "interleaved"
  • `Write` tool or heredocs to create patches

**Whole files:** just `git add <file>`

**New files:** just `git add <file>`

**Partial files (specific hunks):**

.claude/skills/commit-splitter/scripts/extract-hunks.py /tmp/<file>.patch <hunk_numbers> > /tmp/commit.patch
git apply --cached /tmp/commit.patch

Example:

# Commit 1: just perf logging (hunk 1)
.claude/skills/commit-splitter/scripts/extract-hunks.py /tmp/modal_app.patch 1 > /tmp/commit1.patch
git apply --cached /tmp/commit1.patch
git commit -m "perf: add logging"

# Commit 2: async + min_containers (hunks 2,3)
.claude/skills/commit-splitter/scripts/extract-hunks.py /tmp/modal_app.patch 2,3 > /tmp/commit2.patch
git apply --cached /tmp/commit2.patch
git commit -m "perf: async and min_containers"

After each commit, verify with `git diff --cached --stat`.

5. extract-hunks.py reference

Location: `.claude/skills/commit-splitter/scripts/extract-hunks.py`

# List hunks with summaries
.claude/skills/commit-splitter/scripts/extract-hunks.py file.patch --list

# Extract specific hunks
.claude/skills/commit-splitter/scripts/extract-hunks.py file.patch 1,3,5      # hunks 1, 3, 5
.claude/skills/commit-splitter/scripts/extract-hunks.py file.patch 2-4        # hunks 2, 3, 4
.claude/skills/commit-splitter/scripts/extract-hunks.py file.patch 1,3-5,7    # mixed

The script outputs a valid patch to stdout. Redirect to a file, then `git apply --cached`.

Recovery

If something goes wrong:

  • `git reset HEAD` to unstage
  • `git stash list` to find safety stash
  • `git checkout -- <file>` then `git stash apply` to restore a file

After all commits succeed:

  • `git stash drop` to remove safety stash
Read more
Ships withsundial-org-skills

The skill skill can help you find, improve, and publish skills — install it with npx sundial-hub add skill. You'll be able to peruse this library of curated skills, plus 50,000+ more aggregated from the web.

Get the whole plugin

Other skills on sundial-org-skills.