「空っぽに見えた作業部屋」が、確認なしで消えていた──Claude Code v2.1.304が、worktree自動削除のコミット喪失を塞いだ
git worktree を使い捨ての作業部屋として自動管理するClaude Codeに、確認なしで枝とコミットを消す落とし穴があった。v2.1.304は削除前の確認を正し、レビューの深さ選択も追加。自衛策と救出手順もまとめる。
並行作業のために「使い捨ての作業部屋」を建てる――git worktree をエージェント運用の標準に据える流れは、Codex も Claude Code もこの数週間で既定に寄せてきました。ところが、その「使い終わったら自動で片づける」仕組みに、黙ってコミットごと消してしまう落とし穴が潜んでいたことが分かりました。Anthropic は Claude Code v2.1.304(2026年10月19日公開)で、この挙動を確認つきに戻しています。
片づけの合図を、ツールが読み違えていた
claude --worktree は、専用の作業ツリーと枝(ブランチ)を切って作業し、セッション終了時に不要なら削除する設計です。本来は中身が残っていれば「消していいか」を尋ねるはずでした。しかし、終了時の判定が特定の状態を正しく見分けられず、確認を飛ばしてツリーと枝ごと削除してしまうケースがありました。
消えたコミットは、どの枝からも参照されない「迷子(orphan)」になります。Git の定期的なゴミ掃除(garbage collection)が走るまでは猶予がありますが、掃除が済めば復元できません。未コミットの変更にいたっては、ツリーごと消えた時点で失われます。「空っぽに見えた部屋を片づけただけ」のはずが、実は書きかけの原稿が机に残っていた、という事故です。
どの状態で踏み抜いたか
確認が飛ばされたのは、終了時の HEAD(いま見ている位置)が、Claude が作った枝から外れていたときでした。整理すると次の2つです。
| 状態 | 何が起きたか |
|---|---|
| detached HEAD(枝ではなくコミットを直接指している) | 確認ダイアログが出ないまま、ツリーと枝が削除される可能性があった |
| Claude が作った枝とは別の枝に切り替えていた | 同じく、確認なしで削除され得た |
つまり「作業の途中で枝を切り替えた」「特定のコミットを見に行って detached HEAD になった」――開発中にごく普通に起きる操作が、そのまま地雷になっていたわけです。
v2.1.304 が直したこと
今回の修正は、削除前の状態判定を正しくして、作業が残っているときには必ず確認を挟むようにしたものです。あわせて、rm -r の安全確認がマウント済みドライブや最上位フォルダにも及ぶよう拡張されました。これまで同じ確認が出ていなかった経路を塞いだ格好です。worktree セッションを日常的に使い、枝の切り替えや detached HEAD になる場面がある場合は、早めの更新が勧められています。
いますぐ効く自衛策と、消えた後の救出
更新前後の備えとして、2つの手が知られています。
- 自分でロックをかけておく:
git worktree unlock <path>でいったん外し、git worktree lock --reason "keep" <path>と独自の理由文字列でかけ直します。Claude Code の片づけ処理は、ロック理由がclaude (agent|session) …の形に一致するものしか外しません。別の理由でロックしておけば「自分が書いていないロック」と見なされ、ツリーが保持されます。 - 消えた後に探す:ゴミ掃除が走る前なら
git fsck --unreachable --no-reflogsで迷子コミットを洗い出し、git branch rescue/name <hash>で枝を付け直して救出できます。時間との勝負になる点に注意してください。
なお「中身が空(変更0・新規コミット0)で、名前のないセッション」のときにツリーを自動削除する挙動自体は設計上の正常動作です。消したくない作業ツリーには名前を付けるか、上記のロックで線を引いておくのが安全です。
あわせて入った「レビューの強さ」の選択肢
同じ更新では、GitHub 連携の Code Review にレビューの深さを選ぶ段階が加わりました。組織のオーナーが Quick(軽め)/Standard(既定)/Deep(深め)の3段階を組織全体に設定でき、リポジトリごとに個別指定もできます。さらに、GitHub 組織内の全リポジトリ(後から追加された分も含む)を一括でレビュー対象にする設定も用意されました。レビュー負荷と見落としのバランスを、現場ごとに調整しやすくなります。
このほか、プロジェクトと直近セッションを読んで自動モードを環境に合わせる /auto-mode-setup が Bedrock・Vertex・Foundry などでも使えるようになり、Pro/Max プランでは放置していた会話を再開すると5時間の利用枠を大きく消費する場合に警告が出るようになりました。
便利さの既定値が、壊す側に振れていた
worktree の自動管理は、並行作業の後片づけを肩代わりしてくれる便利な仕組みです。ただ今回の件は、「片づけ」という親切の既定値が、条件次第で作業を消す側に倒れ得たことを示しました。エージェントに判断を任せる領域が広がるほど、「黙って実行される破壊的操作」をどこで止めるか――確認ダイアログや fail-closed な関所――の設計が、生産性と同じ重みで問われます。自動化の恩恵を取りに行くときほど、消えて困るものにロックや名前で印をつけておく運用が効いてきます。
参照: Claude Code changelog(公式) / Major Updates in Claude Code v2.1.303 to v2.1.304(クラスメソッド) / Claude Code's --worktree Could Delete a Branch on Exit Without Asking. 2.1.304 Fixes It(DEV) / Claude Code deletes clean worktrees on exit without asking. git worktree lock stops it.(DEV) / Claude Code 2.1.304 release notes(ai-tldr)


