別のバージョン管理システムまたはデスクトップアプリを使用している場合は、ご自身の環境に応じた手順に従ってください。
- その他のバージョン管理システム:worktree には git リポジトリが必要です。git のロジックを置き換えるフックを設定してください
- デスクトップアプリ:セッションを独自の worktree で実行するを参照してください
worktree で Claude を開始する
--worktree または -w に名前を付けて渡すと、分離された worktree を作成し、その中で Claude を開始します。デフォルトでは、worktree はリポジトリルートの .claude/worktrees/<name>/ の下に、worktree-<name> という名前の新しいブランチ上に作成されます。
bright-running-fox などの名前を生成します。
対話実行にはワークスペースの信頼が必要です。そのディレクトリでこれまで Claude を実行したことがない場合は、そこで claude を 1 回実行して信頼ダイアログを受け入れてください。そうしないと、--worktree はエラーで終了し、それを行うよう求めます。-p を使用した非対話実行は信頼チェックをスキップするため、claude -p --worktree はそれなしで進行します。
worktree の環境をセットアップする
worktree は新しいチェックアウトなので、そこで開発環境を初期化してください。Claude に依存関係のインストールを依頼するか、.claude/worktrees/ の下の worktree ディレクトリでプロジェクトのセットアップを自分で実行します。.env などの gitignore されたファイルをすべての新しい worktree に自動的に持ち込むには、.worktreeinclude ファイルを追加します。
Claude に worktree の作成を依頼する
セッション中に Claude に「worktree で作業する」と指示することもでき、Claude はEnterWorktree ツールを使用して worktree を作成します。worktree に入ると、Claude はターゲットパスを指定して EnterWorktree を呼び出すことで、.claude/worktrees/ の下の別の worktree に直接切り替えることができます。前の worktree はディスク上に変更されずに残ります。
Claude がリポジトリの .claude/worktrees/ ディレクトリの外のパスに入る場合、Claude Code は最初に承認を求めます。この移動により、セッションの作業ディレクトリ、書き込みアクセス、および CLAUDE.md や設定などのプロジェクト設定がその場所に移るためです。EnterWorktree の権限ルールや「今後は確認しない」の選択ではこのプロンプトは抑制されず、bypassPermissions モードのみがスキップします。
フックのパスは worktree に追従しません。 Claude が worktree に入った後も、Claude Code はフック内の
${CLAUDE_PROJECT_DIR} を元の場所のままにし、worktree のパスは別の方法でフックに渡します。${CLAUDE_PROJECT_DIR}は変わらない: セッションが開始されたプロジェクトルートを引き続き指すため、${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.shなどのフックコマンドは引き続きメインチェックアウト内のスクリプトを実行します。cwdは Claude に追従する: フックの入力 JSON のcwdフィールドは worktree のルートであり、Claude がcdを実行すると再び移動します。フックが worktree のパスを必要とする場合はこれを読み取ります。
Claude に EnterWorktree ツールがない
Claude に worktree で作業するよう依頼しても EnterWorktree や ExitWorktree ツールがない場合は、permissions.blockWritesOutsideWorkingDirectories が有効になっているかどうかを確認してください。このキーが有効になると、Claude Code は両方の worktree ツールを削除するか、それらの呼び出しを拒否します。
このキーが有効なままでも、worktree での作業は続けられます。
- 対話セッション:
claude --worktreeを使用して worktree でセッションを開始します。 - バックグラウンドセッション: Claude Code は、セッションが
EnterWorktreeを呼び出すまで、メインチェックアウトでのバックグラウンドセッションの編集を拒否しますが、セッションにはそのツールがありません。次のいずれかを行うと、セッションが編集できるようになります。claude --bg --worktreeで開始するworktree.bgIsolationを"none"に設定する- セッションを開始したディレクトリの下に
git worktree addで作成した worktree で Claude に編集させる
/status を実行して読み込まれた設定ソースを一覧表示し、このキーを設定しているすべてのファイルからキーを削除します。その後、Claude Code を再起動します。管理設定でこのキーが設定されている場合は、ポリシーを変更すべきかどうかを管理者に確認してください。
worktree をクリーンアップする
対話的な worktree セッションを終了すると、Claude は削除によって失われる作業がないか worktree を確認します。対象は、変更されたファイルや追跡されていないファイル、チェックアウトされたサブモジュール内のコミットされていない作業、および新しいコミットです。これらのルールは、Claude が git で作成した worktree に適用されます。WorktreeCreate フックが作成した worktree については、代わりに WorktreeRemove を参照してください。- worktree がクリーンな場合: 名前のないセッションでは、Claude は worktree とそのブランチを自動的に削除します。名前付きセッションでは最初にプロンプトが表示されるため、後で使用するために worktree を保持できます
- worktree に作業が含まれている場合: Claude は worktree を保持するか削除するかを求めるプロンプトを表示します。保持するとディレクトリとブランチが保存されます。後で戻るには、Claude Code が終了時に出力する
claude --worktree <name> --resumeコマンドを実行します。削除すると worktree ディレクトリとそのブランチが、その中のすべての作業とともに削除されます - 別のブランチがチェックアウトされている場合: worktree が自身のブランチ以外のブランチ上にあり、そのブランチに worktree の開始コミット以降のコミットがある場合、Claude は worktree を保持するか削除するかを求めるプロンプトを表示します。どちらを選択しても、その別のブランチとそのコミットは保持されます。削除すると、worktree ディレクトリと、Claude が worktree とともに作成した worktree 自身のブランチが削除されます
- worktree の状態を検証できない場合: Claude Code が worktree の変更をカウントできない、またはサブモジュールのチェックアウトを検査できない場合、worktree を自動的に削除するのではなくプロンプトを表示します。プロンプトには確認できなかった内容が示されます
-p を使用した非対話実行には終了プロンプトがないため、Claude はその worktree をクリーンアップしません。また Claude Code は、作成時に各 worktree に設定したロックを、後続のセッションの古いロックのスイープが解放するまでそのまま残します。削除するには git worktree remove を実行します。worktree がロックされているために git が拒否した場合は、先にその worktree に対して git worktree unlock を実行してください。
Windows では、worktree を削除しても worktree 外のファイルは削除されません。worktree 内のフォルダーが NTFS ジャンクションやディレクトリのシンボリックリンクなど、別の場所へのリンクである場合、Claude Code はリンクのみを削除します。
worktree セッションを再開する
worktree 内で終了せずに終わったセッションを再開すると、Claude Code はセッションをその worktree に戻します。これは対話的な再開、-p を使用した非対話モードでの --continue と --resume、および Agent SDK に当てはまります。--continue は、起動したディレクトリの下に記録されている最新のセッションを選択します。worktree 内に戻った後、セッションにそのツールがある場合は、Claude は ExitWorktree ツールで worktree を終了できます。
セッションを worktree に戻す前に、Claude Code は worktree がメインのチェックアウトとは別のチェックアウトのままであることを検証し、チェックに失敗した worktree への再入を拒否します。git worktree の場合、チェックはその git メタデータを読み取ります。WorktreeCreate フックが作成したものなど、git メタデータを持たない worktree はチェックに合格する場合があります。Claude Code が引き続き拒否するケースは、その回復方法とともに Claude Code が worktree の使用を拒否する に記載されています。メッセージとそれぞれからの回復方法については、セッションが worktree の外で再開される を参照してください。
起動する場所と再開の方法によって、Claude Code が再入する対象が変わります。
- 起動ディレクトリ: メインのチェックアウトまたはリポジトリの別のディレクトリから
--resumeで再開します。Claude Code は、.claude/worktrees/の下に git で作成した worktree には、その内部から起動した場合でも再入します。その他の worktree の内部から起動した場合、Claude Code はそこからその worktree が安全であると確認できる場合にのみ再入します。独自のリポジトリである worktree、git メタデータを持たない worktree、またはgit worktree addで作成した worktree のサブディレクトリからの起動は拒否されるため、これらはメインのチェックアウトから起動してください。 --fork-session: フォークされたセッションは Claude を起動したディレクトリで開始され、Claude Code は元のセッションの worktree に手を加えません。- 削除された worktree: worktree ディレクトリが存在しなくなった場合、Claude Code は Claude を起動したディレクトリでセッションを再開します。worktree がなくなったことを通知し、セッションの worktree バインディングをクリアします。
v2.1.212 より前は、非対話的な再開は開始ディレクトリにとどまり、
ExitWorktree は終了するアクティブな worktree セッションがないと報告していました。/cd と同じ方法で、セッションの新しい作業ディレクトリの下にセッションを記録するため、/desktop と --resume はそこでセッションを見つけます。終了すると同じ方法で元に戻ります。WorktreeCreate フックによって作成された worktree は、トランスクリプトを起動ディレクトリに保持します。
Claude Code が分離を強制する仕組み
セッションが worktree 内で分離されている間、Claude Code は以下のチェックで定義されるツール呼び出しをブロックします。セッションを--worktree で開始した場合も、Claude が EnterWorktree で worktree に入った場合も、worktree セッションを再開した場合も、同じルールが適用されます。
分離されたセッションから Claude が生成するすべてのサブエージェントにも同じ強制が適用されます。これはセッションが対話的な場合でも、バックグラウンドで実行される場合でも適用されます。独自の worktree で実行されるサブエージェントにも同じチェックが適用されます。そのバージョン履歴は サブエージェントファイルの書き込み にあります。
Claude Code は 4 つのチェックを適用します。
- ファイル編集: Claude Code は、メインチェックアウト内のパスを対象とする
Edit、Write、またはNotebookEditをブロックします。メインチェックアウト内のファイルを変更するには、自分で編集するか、そこで対話型セッションを開始してください。 - コマンドの作業ディレクトリ: Claude Code は、作業ディレクトリがメインチェックアウトに解決される Bash、PowerShell、または Monitor コマンド、あるいは作業ディレクトリがメインチェックアウトの外にとどまることを検証できないコマンドをブロックします。
- Git のリダイレクト: Claude Code は、git をメインチェックアウトにリダイレクトする Bash または Monitor コマンドをブロックします。リダイレクトは、
git -C、--git-dir、GIT_DIRまたはGIT_WORK_TREE変数、あるいは git を実行する前のメインチェックアウトへのcdによって発生する可能性があります。 - コマンドの形式: Claude Code は、コマンドが実行する git が worktree 内にとどまることをコマンドテキストから検証できない場合、Bash または Monitor コマンドをブロックします。これは、たとえばコマンド名が実行時に計算される場合、構文を解析できない場合、または
${!name}や${ command; }などの展開がテキストに明記されていないコマンドを実行する可能性がある場合に発生します。Claude Code は、拒否されたコマンドを単純な個別のコマンドに分割するなど、書き直す方法を Claude に伝えます。このチェックをオフにすることはできません。
cp やシェルのリダイレクトなど、メインチェックアウトで git を実行せずにメインチェックアウトに書き込むコマンドは、これらのチェックでは拒否されません。Claude Code はそのようなコマンドを、権限とサンドボックス化の設定のもとで他のシェルコマンドと同様に扱います。
チェックは、Claude Code を起動したリポジトリに適用されます。リンクされた worktree のリンク元であるメインチェックアウトも対象になります。PowerShell コマンドについては、Claude Code は作業ディレクトリのチェックのみを適用します。
Claude は各拒否を、worktree の名前と続行方法を示すツールエラーとして受け取ります。拒否されたコマンドについては、拒否メッセージの意味とその解消方法 を参照してください。
worktree でサブエージェントを分離する
サブエージェントは独自の worktree で実行できるため、並列編集が競合しません。Claude に「エージェントに worktree を使用する」と指示するか、カスタムサブエージェントのフロントマターにisolation: worktree を追加して分離を永続化します。
.claude/agents/ 内のこのサブエージェントは、常に独自の worktree で実行されます。
--worktree と同じベースブランチを使用するため、worktree.baseRef が "head" に設定されていない限り、リポジトリのデフォルトブランチからブランチします。
独自の worktree で実行されるサブエージェントは、起動時に読み込む指示ファイルを、その worktree からではなくメインの会話から取得します。その worktree が .claude/worktrees/ 配下のデフォルトの場所にある場合、サブエージェントは worktree 内のファイルを読み取る際にも、worktree のルートにある CLAUDE.md ファイルや .claude/rules/ ディレクトリを読み込みません。これらが worktree のブランチ上で異なっている場合でも同様です。
サブエージェントとバックグラウンドセッションの worktree をクリーンアップする
Claude Code は定期的なスイープを実行し、Claude がサブエージェントとバックグラウンドセッション用に作成した worktree のうち、cleanupPeriodDays 設定より古くなったものを、保持スイープのルールに従って削除します。
--worktree セッションをバックグラウンドに送ると、その worktree はスイープで削除可能なバックグラウンドセッションの worktree になります。スイープは次の場合に worktree をそのまま残します。
- worktree にまだ作業が含まれている: 変更されたファイルや追跡されていないファイル、またはプッシュされていないコミット。
- worktree 内のチェックアウトされたサブモジュールに変更されたファイルや追跡されていないファイルがある、または Claude Code が worktree のサブモジュールを検査できない。このチェックには Claude Code v2.1.274 以降が必要です。
- worktree の作成もブロックする 4 つのケースのいずれかに該当する: Claude Code がリポジトリ設定で定義されているフィルタードライバーを特定できない、またはそこにオフにできない設定項目が見つかった。
- worktree が、バックグラウンドに送っていない
--worktreeセッションに属している(経過時間に関係なく)。 git worktree addで worktree を自分で作成した(その後その中で--worktree <name>セッションを実行し、そのセッションをバックグラウンドに送った場合でも)。
WorktreeCreate フックが作成した worktree を含む)を保持します。
worktree のロックと手動削除
エージェントの実行中、Claude Code は同時実行のクリーンアップで削除されないように、その worktree にgit worktree lock をかけ、エージェントが完了するとロックを解放します。Claude Code は、バックグラウンドに送られたセッション用に作成した worktree にも、セッションの実行中に同じロックをかけるため、スイープはその worktree をそのまま残し、git worktree remove は削除を拒否します。
スイープは、プロセスが終了したセッションのために Claude Code が設定したロックも解放するため、強制終了されたバックグラウンドセッションが worktree を永続的にロックしたままにすることはありません。スイープは、git worktree lock で自分で設定したロックを解放することはありません。
スイープが保持する worktree をクリーンアップするには、git worktree remove を実行し、worktree にコミットされていない変更または追跡されていないファイルがある場合は --force を追加します。worktree がロックされているために git が拒否した場合は、先にその worktree に対して git worktree unlock を実行してください。
worktree の作成をカスタマイズする
Claude Code の worktree 作成のデフォルトは、ほとんどのセッションに対応しています。worktree を.claude/worktrees/ の下に作成し、リポジトリのデフォルトブランチからブランチし、追跡されているファイルのみをチェックアウトします。このセクションのオプションでこれらのデフォルトを変更できます。
ベースブランチを選択する
新しい worktree はリポジトリのデフォルトブランチからブランチするため、ほとんどのセッションではこの設定は必要ありません。代わりに現在の作業からブランチするには、設定でworktree.baseRef を設定します。この設定は 2 つの値を受け入れます。
"fresh"(デフォルト): リモート上のリポジトリのデフォルトブランチ(通常はmain)からブランチするため、worktree はリモートと一致するクリーンなツリーから開始します。"head": 現在のローカルHEADからブランチするため、worktree はプッシュされていないコミットと機能ブランチの状態を保持します。進行中の作業で動作する必要があるサブエージェントを分離する場合に使用します。worktree 内では、"head"はメインチェックアウトのHEADではなく、その worktree のHEADに解決されます。
worktree.baseRef をブランチ名に設定することはできません。特定の既存ブランチから worktree を開始するには、git で直接作成してください。
"fresh" ベースの場合、Claude Code は origin/HEAD を最新の状態に保ちます。
- 過去 24 時間にリポジトリがフェッチされていない場合、デフォルトブランチを 5 秒を上限としてフェッチし、フェッチが失敗した場合はローカルにキャッシュされたリファレンスを使用します。
- このフェッチはターミナルでの入力を待機しません。git または ssh がパスワード、鍵のパスフレーズ、または新しい SSH ホストの確認を求める場合も、失敗として扱われます。
- リモートが設定されていない場合、または
origin/HEADがローカルにキャッシュされておらずフェッチできない場合、worktree は現在のローカルHEADにフォールバックします。
プルリクエストからブランチする
特定のプルリクエストまたはマージリクエストからブランチするには、# を前に付けた番号、GitHub プルリクエスト URL、または https://gitlab.com/group/repo/-/merge_requests/123 などの GitLab マージリクエスト URL を --worktree に渡します。Claude Code はその変更の head コミットを origin からフェッチし、.claude/worktrees/pr-<number> に worktree を作成します。シェルが # をコメントの開始として扱わないように、引数を引用符で囲んでください。
origin リモートからフェッチし、origin のホストに応じてフェッチパスを選択します。
- github.com:
pull/<number>/headをフェッチします - gitlab.com:
merge-requests/<number>/headをフェッチします - GitHub Enterprise、セルフマネージド GitLab、またはその他のホスト: まず
pull/<number>/headを試し、次にmerge-requests/<number>/headを試します
Error creating worktree: Failed to fetch PR/MR #<number> メッセージを表示して終了します。ssh-agent が保持している鍵は引き続き使用できるため、開始する前に鍵を ssh-agent に読み込み、git fetch を一度手動で実行して新しいホストを記録してください。
v2.1.233 より前は、Claude Code は --worktree に対して #<number> と GitHub 形式のプルリクエスト URL のみを受け入れ、常に pull/<number>/head をフェッチしていました。
gitignore されたファイルを worktree にコピーする
worktree は新しいチェックアウトなので、メインリポジトリの.env や .env.local などの追跡されていないファイルは存在しません。Claude が worktree を作成するときに自動的にコピーするには、プロジェクトルートに .worktreeinclude ファイルを追加します。
このファイルは .gitignore 構文を使用します。パターンに一致し、かつ gitignore されているファイルのみがコピーされるため、追跡されているファイルは決して複製されません。
**/ で始まるパターンを記述し、対象のファイルがディレクトリ全体として gitignore されているディレクトリ内にある場合、Claude Code は、そのディレクトリ自体がパターンに一致する場合、または **/ の後の最初の名前がディレクトリのパスに含まれる名前のいずれかである場合にのみ、それらをコピーします。たとえば **/.claude/skills/*.md と記述した場合、その最初の名前は .claude なので、Claude Code は無視された .claude/ ディレクトリから一致するファイルをコピーします。**/ パターンが届かない無視されたディレクトリからファイルをコピーするには、代わりにパターン内でディレクトリ名を指定します。**/config.json ではなく vendor/**/config.json と記述してください。v2.1.239 より前は、Claude Code は **/ パターンについて、ディレクトリ自体がパターンに一致する場合にのみ、全体が無視されたディレクトリからファイルをコピーしていました。
この .worktreeinclude は 2 つの env ファイルと 1 つのシークレット設定を各新しい worktree にコピーします。
.worktreeinclude
--worktree の worktree、サブエージェントの worktree、およびデスクトップアプリの並列セッションです。WorktreeCreate フックを使用する場合は、フックスクリプト内でファイルをコピーしてください。
worktree 名を再利用する
--worktree に渡した名前の worktree が既に存在する場合、Claude Code は新しい worktree を作成する代わりにその worktree を開きます。Claude Code が belongs to a different repository または is a leftover worktree を含むエラーで停止した場合は、worktree ディレクトリが belongs to a different repository となるを参照してください。
デフォルトの "fresh" ベースでは、以下のすべてが当てはまる場合、再度開かれた worktree は古いチップで続行する代わりにリポジトリのデフォルトブランチにリセットされます。
- コミットされていない変更または追跡されていないファイルがない。
- Claude Code が作成したブランチ上にまだある。
- 独自のコミットがない、またはプルリクエストやマージリクエストがマージされ、リモートブランチが削除されている。
- worktree がいずれかの条件を満たさない。
- Claude Code が worktree の状態を検証できない。
worktree.baseRefが"head"である。- 名前がプルリクエストまたはマージリクエストの参照である。
フックで worktree の作成を置き換える
WorktreeCreate フックを設定すると、.claude/worktrees/ 以外の場所に worktree を配置することも含め、デフォルトの git worktree ロジックを完全に置き換えることができます。完全な例については、非 git バージョン管理 を参照してください。
worktree がメインチェックアウトと共有するもの
worktree は独自のファイルとブランチを持ちますが、以下をメインチェックアウトと共有します。-
リポジトリの
.gitディレクトリ: worktree 内の git コマンドは、メインリポジトリの共有.gitディレクトリに書き込みます。サンドボックスが有効な場合、git commitなどのコマンドは worktree のルートで実行されるセッションで動作します。--worktreeはこのルートでセッションを開始します。デフォルトでは、worktree のサブディレクトリでclaudeを実行すると、これらのコマンドはindex.lockエラーで失敗します。 - プラグイン: メインチェックアウトからプロジェクトスコープでインストールされたプラグインは、同じリポジトリの worktree でも読み込まれるため、worktree ごとに再インストールする必要はありません。
-
権限の承認: worktree セッションで Bash コマンドに対して「はい、今後は確認しない」を選択すると、ルールはメインチェックアウトの
.claude/settings.local.jsonに保存されます。このルールはメインチェックアウトとリポジトリの他のすべての worktree に適用され、worktree の削除後も残ります。 Windows や、Claude Code がリポジトリルートを使用しないその他のケースでは、ルールはその worktree に残ります。承認が保存される場所を参照してください。 -
追跡されていないスキル、エージェント、コマンド: worktree のチェックアウトのルートに
.claude/skillsディレクトリがない場合(たとえば.claude/skillsが gitignore されている場合)、Claude Code は worktree セッションでメインチェックアウトのプロジェクトスキルを読み込みます。独自の.claude/skillsディレクトリを持つ worktree では、そのコピーのみが読み込まれます。 同じ読み取りの引き継ぎは.claude/agentsと.claude/commandsにも適用されます。スキルについては、この引き継ぎには Claude Code v2.1.277 以降が必要です。
--worktree で作成した場合も、git worktree add で作成した場合も適用されます。
デスクトップアプリから開始した worktree セッションでは、Claude Code は設定、フック、スキル、エージェント、コマンド、.mcp.json サーバーなどのプロジェクト設定を、メインチェックアウトのルートから読み込みます。フックのコマンドはそのルートで実行され、${CLAUDE_PROJECT_DIR} はそのルートを指します。Claude が作業しているファイルにアクセスするには、フックの cwd 入力フィールドから worktree のパスを読み取ってください。CLAUDE.md ファイルと .claude/rules/ は引き続き worktree から読み込まれます。
worktree を手動で管理する
特定の既存ブランチをチェックアウトする必要がある場合や、worktree をリポジトリの外に配置する必要がある場合は、Git を直接使用して worktree を作成します。 新しいブランチに worktree を作成します。fix-issue-456 は、リポジトリに既に存在するブランチに置き換えてください。
非 git バージョン管理
worktree の分離はデフォルトで git を使用します。SVN、Perforce、Mercurial、またはその他のシステムの場合、WorktreeCreate および WorktreeRemove フック を設定して、カスタム作成およびクリーンアップロジックを提供します。フックはデフォルトの git 動作を置き換えるため、--worktree を使用する場合、.worktreeinclude は処理されません。フックスクリプト内でローカル設定ファイルをコピーしてください。
この WorktreeCreate フックは、jq を使用して stdin の JSON から worktree 名を読み取り、新しい SVN 作業コピーをチェックアウトし、ディレクトリパスを出力して Claude Code がセッションの作業ディレクトリとして使用できるようにします。設定を settings.json に追加します。
WorktreeRemove フックとペアにします。入力スキーマと削除例については、フックリファレンス を参照してください。
WorktreeCreate フックを使用すると、git リポジトリの外で /batch を実行することもできます。その場合、各 /batch サブエージェントはプロジェクトのバージョン管理コマンドで変更を公開し、プルリクエストを開けない場合は、代わりに公開した内容を報告します。git リポジトリの外で /batch を実行するには、Claude Code v2.1.281 以降が必要です。
トラブルシューティング
Claude Code は、worktree を作成するとき、起動時に worktree に入るとき、または再開したセッションを worktree に戻すときに、以下のエラーを報告します。Claude Code が起動時に worktree に入れない
Claude Code が起動時に worktree ディレクトリに入ることができない場合、パスを示すエラーを出力し、コード 1 で終了します。これは、WorktreeCreate フックが作成したディレクトリ以外のものを出力した場合や、セットアップ後にディレクトリが削除された場合に発生する可能性があります。
シンボリックリンクされたパスで worktree の作成が失敗する
.claude、.claude/worktrees、または worktree ディレクトリ自体がシンボリックリンクである場合、Claude Code は worktree の作成を拒否し、エラーにはシンボリックリンクのパスが示されます。シンボリックリンクを削除して再試行してください。v2.1.212 より前は、リポジトリにこれらのパスのいずれかにコミットされたシンボリックリンクが既に含まれていた場合、worktree の作成はそれをたどり、リポジトリの外にファイルを作成する可能性がありました。
Claude Code が作成した worktree に置き換えられたオブジェクトの元の内容が含まれる
リポジトリでgit replace を使用している場合、Claude Code が作成する worktree 内のファイルには、refs/replace/ エントリが指定する置き換え後の内容ではなく、元のオブジェクトの内容が保持されます。Claude Code は、worktree のファイルをチェックアウトする git コマンドを GIT_NO_REPLACE_OBJECTS=1 を付けて実行し、その変数に対してエクスポートした値はすべて無視します。
置き換え後の内容を取得するには、git worktree add で自分で worktree を作成し、その中で Claude Code を起動してください。
Claude Code が作成した worktree で Git LFS ファイルがポインターファイルになる
git lfs install --local で Git LFS をセットアップした場合、Claude Code が作成する worktree には実際のファイルではなく LFS ポインターファイルが含まれます。--local フラグは、LFS フィルターをグローバル git 設定ではなく、リポジトリ独自の .git/config に書き込みます。通常の git lfs install はグローバル設定に書き込むため、影響を受けません。リポジトリ独自の設定で定義されているその他のフィルタードライバーにも同じことが当てはまります。
Claude Code は、worktree を作成する際にリポジトリ独自のフィルタードライバーをスキップします。フィルタードライバーはシェルコマンドであり、Claude を含め、リポジトリに書き込めるものなら何でもそこに配置できた可能性があるためです。v2.1.247 より前は、Claude Code は worktree の作成中にこれらのドライバーを実行していました。
実際のファイルを取得するには、worktree 内で git lfs pull を実行します。
まれな 4 つのケースでは、Claude Code は worktree をまったく作成しません。リポジトリの設定で定義されているフィルタードライバーを判別できない場合、またはそこでオフにできない設定項目が見つかった場合です。エラーと対応する修正方法を照らし合わせてください。
Could not read the repository git config to neutralize filter drivers: Claude Code がリポジトリの.git/configを読み取れませんでした(たとえばそのファイルの権限が原因)。それを修正して再試行してください。The repository git config defines a filter driver whose name cannot be neutralized (contains "=" or a newline):.git/config内のそのフィルタードライバーの名前を変更するか削除して、再試行してください。The repository git config has a conditional include (includeIf):.git/config内のincludeIfが取り込む設定をそのファイルに直接移動し、includeIfを削除して再試行してください。グローバル git 設定内のincludeIfはこれをトリガーしません。Git was not run: the repository's own git config sets <key>: メッセージには、lfs.customtransfer.<name>.pathやlfs.standalonetransferagentなど、Git LFS に実行するプログラムを指定するキーが示されます。その設定が自分のものであれば、グローバル git 設定に移動します。心当たりがない場合は、信頼していないツールやチェックアウトが書き込んだ可能性があるため、リポジトリの git 設定から削除してください。リポジトリの設定からキーがなくなったら再試行してください。
パーシャルクローンで worktree の作成が失敗する
This repository is a partial clone を含むエラーは、worktree の開始コミットに必要なすべての git オブジェクトを Claude Code が取得できなかったことを意味します。メッセージ内の try again で終わる文に示された手順を実行してください。その後、その手順を実行したシェルから再試行します。claude --worktree を実行するか、そこで claude を起動して再度依頼してください。
Can only use --worktree in a git repository
このエラーは、git チェックアウトではないディレクトリで --worktree を渡し、かつ WorktreeCreate フックが有効になっていないことを意味します。
- バージョン管理を使用していないフォルダーでは、そこで
git initを実行し、最初のコミットを作成してから再試行してください。 - 別のバージョン管理システムのチェックアウトでは、メッセージが提案するフックをセットアップしてください。
- ディレクトリで直接作業するには、
--worktreeを付けずに Claude を起動してください。
worktree ディレクトリが belongs to a different repository と表示される
エラー belongs to a different repository と is a leftover worktree はどちらも、渡した worktree 名に対応するディレクトリを git が別の場所に結び付けていることを意味します。これは、プロジェクトをコピーまたは移動した後に発生する可能性があります。
別の worktree 名を渡してください。ディレクトリに残すべき作業がなく、プロジェクトをコピーも移動もしていない場合は、そのディレクトリを削除して同じ名前で再試行できます。コピーまたは移動の後では、この再試行が is already checked out elsewhere in this repository で失敗することがあるため、別の名前を使用してください。
Claude Code が worktree の使用を拒否する
Refusing to use <path> as an isolation worktree で始まるエラーは、Claude Code がディレクトリをセッションまたはサブエージェントの分離されたチェックアウトとして採用する前にそのディレクトリの git ID を確認し、拒否したことを意味します。このチェックは、Claude Code が worktree を作成する場合、既存の worktree に入る場合、以前の実行の worktree を再利用する場合のいずれでも実行されます。
ほとんどの場合、メッセージの残りの部分には、ディレクトリの git メタデータがメインチェックアウトに解決されることが示されています。たとえば、その .git ファイルがメインリポジトリ自体の .git ディレクトリを指している場合や、core.worktree リダイレクトによって git がその作業ツリーをメインチェックアウトに解決する場合です。そのようなディレクトリからは、git reset --hard などの通常の git コマンドが worktree ではなくメインチェックアウトに作用してしまいます。Claude Code は、ディレクトリに読み取れない .git エントリがある場合も、worktree が安全であると想定せずに拒否します。
WorktreeCreate フックが作成するディレクトリなど、git メタデータをまったく持たないディレクトリは、それを含む git リポジトリがない場合にのみチェックに合格します。フックがリポジトリ内にディレクトリを作成すると、git はそれをそのリポジトリのチェックアウトに解決し、Claude Code は git resolves its working tree to メッセージで拒否するため、フックはディレクトリをリポジトリの外に作成するようにしてください。
拒否されたディレクトリには作業が含まれている可能性があるため、Claude Code はそのまま残します。メッセージが Refusing to use <path> に続くものであっても、再開メッセージに表示されるものであっても、メッセージと回復方法を照らし合わせてください。一部の末尾は再開メッセージにのみ表示されます。
-
launch from the parent checkoutまたはRun the resume from the project checkoutと表示される: worktree 内から Claude Code を起動しました。代わりにメインチェックアウトから起動してください。worktree を再作成する必要はありません。 -
it cannot be resumed or re-enteredと表示される: このセッションには、起動した場所からその worktree を安全と確認できるものがありません。worktree を再作成してください。ディレクトリとその作業は手動回復のためにディスク上に残ります。worktree に親チェックアウトがある場合は、そこから再開することもできます。 -
it contains the protected checkoutと表示される: 拒否されたディレクトリは、ホームディレクトリなど、メインチェックアウトの親です。削除しないでください。WorktreeCreateフックが返すパスやEnterWorktreeのターゲットなど、worktree のパスを変更して、worktree がチェックアウトを含まないようにしてください。 -
the protected checkout <path> has a .git entry that could not be examinedまたはhas git metadata that could not be resolvedと表示される: 問題は worktree ではなくメインチェックアウトの git メタデータにあります。worktree を削除しないでください。また、メッセージ末尾の worktree を再作成するようにというアドバイスは、これら 2 つの末尾には当てはまらないため無視してください。メインチェックアウトを修復し(たとえば.gitに対する権限の問題や git のdubious ownershipによる拒否)、再試行してください。 v2.1.302 より前は、git 2.56 以降を使用している場合、the protected checkoutの後の<path>に孤立した.gitファイルがあるときにも、could not be resolvedという末尾が表示されていました。ここでいう孤立とは、そのファイルのgitdir:行にあるパスが有効な git リポジトリにつながらないことを意味します。回復するには、Claude Code を更新して再試行してください。そのgitdir:パスがもう存在しない場合は、.gitファイルを削除して再試行することもできます。 -
its recorded path has a network spellingと表示される: Claude Code はネットワークパスにある worktree へ再開することはありません。ローカルパスに worktree を再作成してください。 -
その他の末尾: メッセージには、
core.worktreeリダイレクトの削除や worktree の再作成など、問題とその修正方法が示されています。それに従ってください。git ID を検証できなかったというメッセージが表示されたディレクトリを削除する前に、worktree のパス内のシンボリックリンクや git 自体の実行失敗など、示された原因に先に対処してください。ディレクトリが正常である可能性があるためです。再作成する場合は、先に古いディレクトリから必要な変更を回収してください。古いディレクトリはディスク上に残ります。
セッションが worktree の外で再開される
セッションを対話的に再開し、Claude Code がそれを worktree に戻せない場合、Claude Code は以下のいずれかのメッセージでその旨を伝えます。Claude Code が worktree バインディングをクリアすると、そのクリアをセッションのトランスクリプトに記録します。トランスクリプトの書き込みを抑制している場合、メッセージは代わりに、バインディングをクリアできなかったこと、および Claude Code が後の再開時に worktree を再確認することを示します。-p を使用した非対話モードおよび Agent SDK が実行する再開では、Claude Code は分離なしで続行するのではなく、worktree が存在しない場合を除くすべての拒否に対して stderr エラーで再開を停止します。
--output-format stream-json を使用すると、拒否は stdout にもサブタイプ error_during_execution の result メッセージとして届き、その errors 配列に同じテキストが含まれるため、Agent SDK アプリケーションはゼロ以外の終了コードだけでなく理由も受け取れます。v2.1.260 より前は、worktree の再開拒否で result メッセージは生成されませんでした。
メッセージは、表にある対話的なメッセージとは異なる形式になります。
-
表で
Did not re-enterとして示される拒否の場合はError: cannot resume into worktree <path>: ...This session was not started.。Claude Code は終了前に worktree バインディングをクリアし、エラーにもそのことが示されます。次に会話を再開すると、セッションは worktree 分離なしで現在のディレクトリで続行されます。v2.1.260 より前は、Claude Code はクリアされたバインディングを書き込まなかったため、同じ再開を再試行するたびに同じエラーで失敗していました。 トランスクリプトの書き込みを抑制している場合、クリアを保存できません。その場合、エラーには同じコマンドが再び拒否されることが示され、worktree なしで続行する方法として--fork-sessionと新しい会話の開始が挙げられます。 -
Could not verifyの場合はError: could not verify worktree <path> for this resume, so the resume was aborted... -
Could not re-enterの場合はError: ...The worktree binding is kept. -
worktree が存在しない場合は
Notice: the worktree <path> for this session no longer exists...。Claude Code はこれを出力し、対話的な再開と同様にセッションを続行します
startup_failure_reason は、could not verify worktree エラーの場合は worktree_unverified、cannot resume into worktree および The worktree binding is kept エラーの場合は worktree_resume_refused になります。アプリケーションはエラーテキストを照合する代わりに、これに基づいて分岐できます。v2.1.274 より前は、結果に startup_failure_reason フィールドは含まれていませんでした。
関連項目
worktree はファイルの分離を処理します。以下の関連ページでは、これらの分離されたチェックアウトに作業を委任する方法、チェックアウト間で調査結果を受け渡す方法、および作成したセッション間を切り替える方法について説明しています。- サブエージェント: セッション内の分離されたエージェントに作業を委任する
- セッション間メッセージング: worktree 内のセッション同士で調査結果を受け渡せるようにする
- エージェントチーム: 複数の Claude セッションを自動的に調整する
- セッションを管理する: 会話に名前を付け、再開し、切り替える
- デスクトップセッションを専用の worktree で実行する: デスクトップアプリの worktree でサポートされるセッション