mcpField
G
git-squash

git-squash

github.com/paulrberg開発102235 回インストール今日更新
リポジトリ

git-squash について

git-squash は、機能ブランチのデフォルトブランチとの差分を 1 つのコミットにまとめるスキルです。読み取り専用の計画と検証付きの適用手順を使い、失敗時のロールバックにも対応します。

主な機能

  1. 01読み取り専用の squash 計画
  2. 02デフォルトブランチの検出または指定
  3. 03差分に基づくコミットメッセージ作成指針
  4. 04書き換え前の計画の陳腐化チェック
  5. 05適用中断時のロールバック

活用シーン

  1. 01レビュー前の機能ブランチのコミット整理
  2. 02指定したベースに対するコミットの squash
  3. 03ロールバック状態を保った履歴の書き換え

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/paulrberg/agent-skills --skill git-squash

インストール後、Claude Code で/git-squashを入力して読み込まれたか確認します。

同梱ファイルagents/openai.yamlscripts/git-squash.py

詳細

Git Squash

これらの指示がスラッシュまたはドル記号による呼び出しですでに会話に含まれている場合は、そのまま従ってください。 スキルツールを通じてこのスキルを再度呼び出さないでください。

現在のフィーチャーブランチを、解決されたデフォルトブランチとの差分を表す1つのコミットにスカッシュします。

引数

  • --subject <line>:置き換え後のコミットメッセージの1行目に、この文字列をそのまま指定します。
  • --base <branch>:デフォルトブランチの検出結果を上書きします。

--subject を指定しない場合、エージェントはリポジトリのメッセージ形式に従い、残る差分から件名を作成します。--base を指定しない場合、ヘルパーは origin/HEAD、続いてローカルまたはリモートの main、master、trunk の順に解決します。

プランインターフェース

この SKILL.md からヘルパーを解決します。プリフライトをクリーンな状態に保つため、JSON はリポジトリ外のスクラッチパスに書き込みます。

uv run "<skill-dir>/scripts/git-squash.py" plan \
  [--cwd <repo>] [--base <branch>] [--subject <line>] > <plan.json>

plan は読み取り専用です。Git ワークツリー、ブランチがアタッチされていること、ツリーとインデックスがクリーンであること、解決されたベース、現在のブランチがデフォルトブランチではないこと、マージベース、正の先行コミット数、リモートの状態を検証します。schemaVersion: 1、変更不可の元の HEAD、マージベース、ベース参照、時系列順のコミット、重複を除いた作成者、ツリーとリモートの状態、ロールバック情報を返します。前提条件が満たされない場合は、履歴を変更せずに終了します。

変更を加える前に、ブランチ、ベース参照、マージベース、置き換えるコミット、ツリーの状態、リモートの状態、ロールバック時の HEAD を簡潔なプレーンテキストの表で表示します。

エージェントが作成するコミットメッセージ

プランに含まれるコミットと、mergeBase..originalHead の差分を確認します。正とするのは差分です。中間コミットは意図とクレジットの確認にのみ使用します。要約だけでは曖昧な場合は、対象となるハンクを確認します。

--subject が指定されている場合は、その文字列をそのまま使用します。指定されていない場合は、<git-root>/.agents/commit.toml の [message] にある format を読み取ります。値は natural または conventional です。ファイルまたはキーがない場合は conventional とします。

  • natural:Add retry to webhook delivery のように、タイプ接頭辞を付けず、自然な命令形の件名を作成します。
  • conventional:残る変更内容に応じて、feat、fix、refactor、docs、test、build、ci、chore(deps)、style、perf、revert、ai、chore のいずれかをタイプとして選びます。スカッシュであるという理由だけで、変更を chore と呼ばないでください。接頭辞の後は小文字にします。

件名は命令形で具体的にし、末尾にピリオドを付けないでください。残る変更内容ごとに最大5つの本文箇条書きを追加できます。件名だけで十分な場合は本文を省略します。パスや統計情報を羅列しないでください。現在の Git ユーザー以外のプラン作成者それぞれについて、Co-authored-by: Name <email> のトレーラーを1つ追加します。意味内容の表現はすべてエージェントが担当し、すべての記述が差分によって裏付けられていることを確認してください。

最終的なメッセージは、リポジトリ外のスクラッチファイルに書き込みます。

適用インターフェース

uv run "<skill-dir>/scripts/git-squash.py" apply \
  --plan <plan.json> --message-file <message.txt>

apply は、プランの元の HEAD、ブランチ、マージベース、ベース参照、クリーンな状態、ロールバック用インデックス、任意指定の件名に基づいて書き換えを実行します。変更の直前にこれらを再検証します。プランが古くなっている場合は、履歴を変更せずに失敗します。マージベースまでソフトリセットし、ステージされた差分が空でないことを検証してから、メッセージファイルを使ってコミットします。

置き換え後のコミットが完了する前に、変更後のいずれかの操作が失敗した場合、ヘルパーは元の HEAD とインデックスを正確に復元します。ワーキングツリーのファイルには手を加えません。リセットやロールバックの手順を手作業で再現したり、診断内容と現在の Git の状態を確認せずに、ヘルパーの失敗後も処理を続けたりしないでください。

報告

成功した場合は、プランで置き換えられたコミット数、解決されたベース参照、新しいハッシュ、件名を報告します。ブランチが origin に存在する場合は、次の正確なアクションを git push --force-with-lease と明記します。明示的に依頼されない限り、実行しないでください。

最初に ### ✅ Squashed — <old count> commits → 1 を記載します。プリフライトの事実、ハッシュ、コマンド、エラー、ロールバックに関する文言は、プレーンテキストで正確に記載します。

コメント