commit-splitter について
commit-splitterは、作業ツリーの変更を番号付きの差分ハンクごとに複数のGitコミットへ分けるスキルです。明確な計画に沿って変更をコミットしたい開発者向けに、指定ハンクのパッチ適用を案内します。
主な機能
- 01差分ハンクの番号付け
- 02ハンク単位のコミット計画
- 03指定ハンクのパッチ適用とステージ
- 04コミット後のステージ内容確認
活用シーン
- 01無関係な変更を別コミットに分割
- 02承認済みのハンク単位計画を実行
- 03ステージやコミット時の問題から復旧
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sundial-org/ skills --skill commit-splitterインストール後、Claude Code で/commit-splitterを入力して読み込まれたか確認します。
同梱ファイルscripts/extract-hunks.py
詳細
構造化された Git コミット
ワークフロー
1. 安全用のスタッシュ
git stash push -m "save before structured commit: <brief description>" --include-untracked
git stash apply
変更は適用したままにします。コミットの間に再度スタッシュしないでください。安全用のスタッシュは最後の最後にのみ削除してください。
2. ハンクを調査して番号を付ける
変更されたすべてのファイルのパッチを生成し、ハンクを一覧表示します。 特殊文字(角括弧、スペースなど)を含むパスは引用符で囲みます:
git diff "<file>" > /tmp/<file>.patch
.claude/skills/commit-splitter/scripts/extract-hunks.py /tmp/<file>.patch --list
番号付きのハンクが出力されます:
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. ハンク番号を使ってコミット計画を提案する
計画では番号でハンクを参照します:
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. コミットを実行する
重要:承認された計画に厳密に従ってください。分割が「難しそう」という理由でコミットをまとめてはいけません。
次のような近道は絶対に使わないでください:
- ファイルをリセットしてから再編集するための
git checkout - ソースファイルを直接編集すること(Edit/Update ツール)
- 変更が「入り組んでいる」という理由でコミットをまとめること
- パッチを作成するための
Writeツールまたはヒアドキュメント
ファイル全体の場合: git add <file> のみを実行します
新規ファイルの場合: git add <file> のみを実行します
一部のファイル(特定のハンク)の場合:
.claude/skills/commit-splitter/scripts/extract-hunks.py /tmp/<file>.patch <hunk_numbers> > /tmp/commit.patch
git apply --cached /tmp/commit.patch
例:
# 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"
コミットごとに、git diff --cached --stat で確認します。
5. extract-hunks.py の参照情報
場所:.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
このスクリプトは、有効なパッチを標準出力に出力します。ファイルにリダイレクトしてから、git apply --cached を実行します。
復旧
問題が起きた場合:
- ステージングを解除するには
git reset HEAD - 安全用のスタッシュを見つけるには
git stash list - ファイルを復元するには
git checkout -- <file>の後にgit stash apply
すべてのコミットが成功した後:
- 安全用のスタッシュを削除するには
git stash drop
コメント
Markdown 対応