mcpField
C
commit-splitter

commit-splitter

github.com/sundial-org開発15365 回インストール15 週間前に更新
リポジトリ

commit-splitter について

commit-splitterは、作業ツリーの変更を番号付きの差分ハンクごとに複数のGitコミットへ分けるスキルです。明確な計画に沿って変更をコミットしたい開発者向けに、指定ハンクのパッチ適用を案内します。

主な機能

  1. 01差分ハンクの番号付け
  2. 02ハンク単位のコミット計画
  3. 03指定ハンクのパッチ適用とステージ
  4. 04コミット後のステージ内容確認

活用シーン

  1. 01無関係な変更を別コミットに分割
  2. 02承認済みのハンク単位計画を実行
  3. 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

コメント