Communityコーディング&開発github.com

git-worktree

Worktree の作成、入室、削除、一覧表示、クリーンアップ提案を行うスキル。作成前にプランを提示し承認を得てから実行し、終了時にレポートとクリーンアップを提案します。

git-worktree とは?

このスキルは、Git Worktree の操作を安全かつ透明性高く行うための AI エージェント用スキルです。Claude Code と Codex の両方で動作し、開発者が worktree の作成、移動、削除を行う際に、常にプランを提示して承認を得てから実行することで、意図しない操作を防ぎます。 主な機能は以下の3つです。 1. **作成プランの提示と承認:** Worktree を作成する前に、リポジトリ、ベースブランチ、新しいブランチ名、作業ディレクトリ、削除方法などを含む詳細なプランを提示し、ユーザーの明示的な承認を得ます。 2. **Worktree レポートの生成:** PowerShell スクリプトを使用して、開かれている全 worktree の一覧を、パス、サイズ、ブランチ、削除時の損失情報とともに表形式で表示します。 3. **タスク終了時のクリーンアップ提案:** 作業が統合された後に、安全な削除コマンドを提案し、ユーザーの承認を得てから実行します。 このスキルは、特に複数の worktree を並行して管理する開発者にとって有用で、ファイルの喪失やブランチの誤削除を防ぎます。worktree の隔離(Claude Code の isolation: "worktree")や、バックアップ、サブモジュールの扱いなど、実際の開発現場で発生する複雑なケースにも対応しています。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/vitorpadovan/gitworktree-skill/tree/main/skills/git-worktree

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Git Worktree

ユーザーが場所、起点、終了方法を把握していない worktree は作成しません。ユーザーが要求しない worktree は削除しません。

このスキルは、worktree を作成する他のスキル(例:superpowers:using-git-worktrees)よりも、場所、名前、承認の3点において優先されます。他のスキルの残りのフローは引き続き有効です。

エージェント別ツール

アクションClaude CodeCodex
作成git worktree add + EnterWorktree(path: ...) でセッションを移動git worktree add し、worktree 内で git -C/workdir を使用
隔離されたサブエージェントAgent と isolation: "worktree"(.claude/worktrees/ に作成)該当なし
退出ExitWorktree(action: "keep")元のディレクトリに戻る
レポートpwsh -NoProfile -File "<このスキルのフォルダ>/scripts/worktrees-report.ps1"同左

<このスキルのフォルダ> は、この SKILL.md が置かれているディレクトリです。スクリプトには PowerShell 7+(pwsh)が必要です。

1. 作成前

  1. 現在すでに worktree 内にいるか確認します(git rev-parse --git-dir が git rev-parse --git-common-dir と異なり、かつサブモジュール内ではない場合)。すでに worktree 内にいる場合は、ユーザーが要求しない限り新たに作成しません。
  2. 関連するリポジトリでレポートを実行し、結果を手順4のために保持します:
    pwsh -NoProfile -File "<このスキルのフォルダ>/scripts/worktrees-report.ps1" -Path "<repo1>;<repo2>"
    
  3. 以下のデフォルトでプランを組み立て、worktree ごとに1ブロックで提示します:
    Worktree 作成プラン
    - リポジトリ:     C:\repos\loja
    - ベースブランチ: origin/main @ 3f2a9c1(git fetch 実行済み)
    - 新しいブランチ: claude/feat-login-google
    - 名前:            feat-login-google
    - 絶対パス:        C:\repos\loja\.worktrees\feat-login-google
    - 相対パス:        .worktrees\feat-login-google
    - 作成コマンド:    git -C "C:\repos\loja" worktree add "C:\repos\loja\.worktrees\feat-login-google" -b claude/feat-login-google origin/main
    - 削除コマンド:    git -C "C:\repos\loja" worktree remove "C:\repos\loja\.worktrees\feat-login-google"
                        git -C "C:\repos\loja" branch -d claude/feat-login-google
    
    リポジトリにサブモジュール(.gitmodules)がある場合は、削除に --force が必要になる理由をプラン内で説明します。
  4. その直後に、これらのリポジトリで既に開かれている worktree のレポート表を表示します(Worktree、サイズ、ブランチ、削除時の損失)。何もない場合は、その旨を1行で表示します。
  5. ユーザーの明示的な OK を待ちます。 その後でのみ作成します。Claude Code では、プラグインのフックがコマンド実行時に追加の確認を求めます。Codex では、codex/rules/git-worktree.rules が git worktree add に対して同様の処理を行います。

複数のサブエージェントを並行して実行する場合は、すべての worktree を含む単一のプランを提示し、1回の OK を求めます。

デフォルト設定

  • 場所: 両エージェントとも <リポジトリルート>/.worktrees/<名前>。例外は、隔離 "worktree" を使用する Claude Code のサブエージェントで、常に .claude/worktrees/ に作成します。この場合は、プラン内でそのパスを明記します。
  • フォルダを無視する設定: 作成前に git -C <repo> check-ignore -q .worktrees/x を実行します。フォルダが無視されていない場合は、.worktrees/ をリポジトリの info/exclude ファイル(git -C <repo> rev-parse --git-path info/exclude で取得)に追加します。このファイルはローカル専用でコミットされません。実行したことをユーザーに伝えます。
  • 名前: <タイプ>-<短い説明>、kebab-case、最大40文字。例:feat-login-google、fix-timeout-pagamento。
  • 新しいブランチ: <エージェント>/<名前>、つまり claude/feat-login-google または codex/feat-login-google。リポジトリに独自のブランチ規則(フック、CONTRIBUTING、履歴)がある場合は、それに従い、どの規則を使ったかを明示します。
  • ベース: デフォルトでは、ユーザーがメインチェックアウトで現在いるブランチ。タスクがそれとは独立している場合は origin/<デフォルトブランチ> を使用します。事前に git fetch を実行し、ベースの短いハッシュを表示します。

2. Worktree レポート

ユーザーが worktree の一覧表示やクリーンアップを要求した場合、および上記手順1.2で使用します。

pwsh -NoProfile -File "<このスキルのフォルダ>/scripts/worktrees-report.ps1" [-Path "<ルートまたはリポジトリ>;..."] [-Json] [-SkipSize] [-Depth 6]
  • -Path がない場合、スクリプトは GIT_WORKTREE_ROOTS 変数を使用し、それもない場合はカレントディレクトリを使用します。ユーザーの指示(CLAUDE.md、AGENTS.md)でリポジトリのルートフォルダが定義されている場合は、そのフォルダを渡します。
  • このスクリプトは読み取り専用です。リポジトリ、サブモジュール、リポジトリフォルダ外の孤立した worktree を検出します。
  • -SkipSize は、ユーザーが高速性を求める場合に使用します。-Json は、詳細情報(進んでいる/遅れているコミット、リモートステータス、マージ、最終コミット日、判定、削除コマンド)が必要な場合に使用します。

スクリプトが出力する表を、以下の4列で、この順序で表示します:

列内容
Worktree絶対パス
サイズディスク容量
ブランチWorktree のブランチ、または (detached @ <ハッシュ>)
削除時の損失なし、または削除すると失われるもののリスト:コミットされていないファイル、そこにしか存在しないコミット、git で無視されているファイル(例:.env)。ビルドフォルダ(node_modules、bin、obj...)は対象外

列を追加しないでください。詳細は表の下に、判断に役立つ場合のみ記載します。

損失とみなされるもの:

  • 変更または新規でコミットされていないファイル。
  • どのリモートにも、カレントブランチにも、デフォルトブランチにも存在しないコミット。
  • ビルド関連以外の無視されているファイル。
  • 初期化されたサブモジュール内のコミットされていないファイルと、そこにしか存在しないコミット。
  • ロックされた worktree(git worktree lock)は (ロック中...) と表示され、確認なしでは削除されません。
  • フォルダがすでに存在しない場合、列には なし(フォルダは既に存在しません...) と表示されます。git worktree prune で解決します。
  • 制限事項:スカッシュマージやリベースは検出されないため、それらのコミットは損失として表示されます。ユーザーが PR はすでにマージされたと言った場合、リモートで確認します。

レポートの最後に、損失がない worktree を削除した場合に解放される容量を表示します。

削除コマンド

ユーザーが削除、または削除コマンドの表示を要求した場合は、-Json の ComandosRemocao フィールドを使用します。コマンドを正確に、順序通り、1つのブロックにまとめてコピーします。コマンドを暗記して記述しないでください。このフィールドは、以下の3つの落とし穴をすでに解決しています:

  1. 無視されているファイル: 失われる無視ファイル(例:.env、.superpowers/)がある場合、最初のコマンドでそれらを ~/worktree-backup/<repo>/<worktree> にコピーします。コピーは削除の前に行う必要があります。削除後はコピー元が存在しません。
  2. サブモジュール: worktree に初期化されたサブモジュールがある場合、削除コマンドには --force が付きます。これは、git が git worktree remove をそれなしでは拒否するためです。このコマンドを提示する前に、「削除時の損失」列でサブモジュールに損失がないこと、またはユーザーが損失を受け入れたことを確認します。
  3. ブランチ: 最後に git branch -d でブランチを削除します。これはブランチがすでに統合されている場合のみ成功します。

自分で実行する場合は、コマンドを1つずつ実行し、最初のエラーで停止します。

3. タスク終了時

  • Worktree での作業がすでに統合されている(マージされた、またはリモートにプッシュされた)場合は、準備された削除コマンドを提案します。
  • 統合されていない場合は、不足している作業(コミット、プッシュ、PR)を伝えます。
  • Claude Code では、ExitWorktree(action: "keep") で退出し、削除はユーザーの OK を得た後にのみ git コマンドで行います。ExitWorktree(action: "remove") は、同一セッション内で EnterWorktree が作成した worktree に対してのみ機能します。

変更不可のルール

  • ユーザーが要求しない限り、worktree やブランチを決して削除しないでください。1つずつ削除し、最後に再度レポートを実行します。
  • git branch -D や ExitWorktree(discard_changes: true) を、その worktree に対する明示的な確認なしに使用しないでください。git worktree remove --force は、worktree にサブモジュールがある場合(「削除コマンド」参照)で、かつユーザーが失うものを確認した場合のみ使用します。
  • プランを提示し、OK を得る前に worktree を作成しないでください。

関連スキル