AIコーディングエージェント向けGit worktree:安全な運用手順。
Git worktreeを使うと、各タスクに別々のチェックアウト済みファイルと現在のブランチを与えながら、リポジトリのオブジェクトと参照を共有できます。複数のエージェントが同じ作業ディレクトリを編集せずに、並行した案を比較できます。
要点
各案にリンク済みworktree、専用ブランチ、範囲を絞ったタスクを1つずつ割り当てます。両方を同じ記録済み基準コミットから始め、Codex、Claude Code、OpenCode、Cursorなど、指定ディレクトリで動作できるツールを各フォルダ内で実行し、メインのチェックアウトはレビュー用に残します。比較前に、成果をコミットしてレビュー可能にします。
受け入れ条件を満たす案を選び、書き込み中のプロセスを停止し、対象チェックアウトがクリーンであることを確認して、通常のレビューとテストを通してマージします。worktreeはファイル衝突を減らしますが、セキュリティ用サンドボックスではありません。オブジェクト、多くのref、remoteは共有され、シェルに許可されたアクセスは残ります。
1. 案ごとにクリーンなworktreeを作る
メインのチェックアウトから始めます。クリーンであることを確認し、意図した基準を更新または確認して、そのコミットを一度だけ記録し、両方のブランチを同じ基準から作ります。
git status --short
git branch --show-current
BASE_COMMIT=$(git rev-parse HEAD)
git worktree add -b agent/task-a ../agent-task-a "$BASE_COMMIT"
git worktree add -b agent/task-b ../agent-task-b "$BASE_COMMIT"
git worktree list各ツールに対応するフォルダとブランチを割り当てます。同じブランチを2つのworktreeで使わず、タスクAがタスクBのフォルダを書き換えないようにします。基準を記録すれば、remoteブランチが進んでも比較を再現できます。
ディレクトリを分けてもシェル権限は制限されません。認証情報とホスト権限を必要最小限にし、人の管理が必要なGit書き込みには別の承認境界を設けます。
2. 同じ受け入れ条件を使う
両方に同じタスク、テスト、制約、記録済み基準を渡します。無関係な変更を避け、各自のブランチに成果をコミットするよう求めます。未コミットの作業ツリーは比較しにくく、後片付けで失いやすくなります。
レビュー前にエージェントを停止します。worktreeはチェックアウトしたファイルを分けますが、広い権限を持つプロセスは共有refを変更し、remoteへ接続し、タスクフォルダ外のファイルにも到達できます。
3. 記録済み基準から両方を比較する
両方のタスクフォルダの状態を確認し、各ブランチを同じ基準コミットと比較します。ログとdiffの基準を途中で変えないでください。
git -C ../agent-task-a status --short
git -C ../agent-task-b status --short
git log --oneline "$BASE_COMMIT"..agent/task-a
git log --oneline "$BASE_COMMIT"..agent/task-b
git diff "$BASE_COMMIT" agent/task-a
git diff "$BASE_COMMIT" agent/task-b動作、テスト、変更ファイル、範囲を確認します。完了しただけではマージ理由になりません。条件を満たす中で、最も小さく理解しやすい変更を選びます。
既定で両方をマージしないでください。良い案が分かれている場合は、検証済みコミットを選ぶか、クリーンな統合ブランチを作り、その新しい結果を別途レビューします。
4. 選んだ結果を通常のゲートでマージする
クリーンなメインチェックアウトに戻り、レビュー済みブランチを1つ選び、通常のnon-fast-forwardマージ手順を使います。
CHOSEN_BRANCH=agent/task-a
git status --short
git diff "$BASE_COMMIT" "$CHOSEN_BRANCH"
git merge --no-ff "$CHOSEN_BRANCH"マージ中はエージェントの書き込みを止めます。競合が起きたら停止して内容を確認し、通常のレビュー手順で解決します。worktree運用を自動選択の理由にしないでください。
マージ後、push前にリポジトリのテストを実行します。worktreeはコードレビュー、CI、保護ブランチ、人の承認を置き換えず、別途権限を与えられたシェルのpushも防ぎません。
5. 強制せずに後片付けする
リンク済みチェックアウトを削除する前に、両方のフォルダを確認し、残したい変更をすべて保全します。
git -C ../agent-task-a status --short
git -C ../agent-task-b status --short
git worktree remove ../agent-task-a
git worktree remove ../agent-task-b
git worktree list
git worktree prune --dry-runworktreeがクリーン、または残作業を意図して破棄した場合だけ、forceなしで削除します。レビューが終わるまでタスクブランチは残します。フォルダ削除とブランチ削除は別の判断です。
管理情報を変える前にpruneをdry runで確認します。Gitが通常削除を拒否した場合、保護を回避せず、残変更やロックを調べます。
worktreeが分けるもの、共有するもの
| worktreeごとに分離 | 共有または到達可能 |
|---|---|
| チェックアウト済みファイル、作業変更、ローカル成果物 | リポジトリオブジェクトと多くのref |
| 現在のブランチ、worktree固有のHEADとindex | remote、認証情報、共有設定 |
| ツールが使うタスクディレクトリ | 広い権限のシェルが外部で到達できるもの |
worktreeはファイルの並行作業、明確なdiff、再現可能な比較に使います。権限、保護ブランチ、レビュー、承認で操作権限を管理します。
互換性は、ツールが指定ディレクトリで動作し、タスク境界を守れるかに依存します。この手順はそのようなツール向けであり、すべてのツールが同じ制御を持つ証明ではありません。
Git公式資料
レビュー権限を保ったまま並行案を比較。
FluxGitはリンク済みworktreeとリポジトリ状態を表示し、変更を比較できます。対応エージェントのGit書き込み提案はデスクトップ承認を通します。別シェルにはホストが与えた権限が残ります。