テクノロジー · 実用ガイド

Git が「branch is already checked out」と表示?prune や強制の前に所有 worktree を証明する

すべての linked worktree を列挙し、未コミット・未 push の作業を保全して、現存・移動・オフライン・欠損を分類してから remove、repair、prune、detach、新ブランチを選びます。

Git worktree 所有者台帳のオリジナル図。
Watch at Ease オリジナルイラスト:登録 branch 所有者を一覧、調査、分類します。 Watch at Ease

Git は同じ branch を複数 worktree で同時に checkout するのを防ぎます。二つの場所が同じ branch ref を動かすためです。エラーの path は登録所有者の証拠で、削除許可ではありません。

porcelain 一覧と対象ディレクトリの確認から始めます。prune は欠損した場所、repair は移動した link、remove は意図的に廃止する worktree 用です。

1. 登録所有者を一覧化

健全な worktree から git worktree list --porcelain を実行し、各 path、HEAD、branch、lock 理由、prunable を記録します。.git/worktrees を触る前にエラー path を解決します。

失敗コマンドと wrapper の remote 動作も記録します。PR は merge 済みでも local cleanup だけ branch guard で止まる場合があります。

2. 対象 path と作業を調査

directory が存在すれば status と base/remote に未到達の commit を確認します。remove 前に patch、untracked file、commit ID を保全します。

temp、agent、build という名前だけで安全と判断しません。lock や古い directory に未公開作業がある、または一時的に offline の可能性があります。

3. 現存・移動・オフライン・欠損を分類

現存所有者がその branch を動かす場所です。外部移動なら repair、携帯・network path は意図的に lock され一時的に不在かもしれません。

未 mount、改名、namespace 外ではなく本当に欠損と証明してから、git worktree prune --dry-run --verbose で対象記録を予告確認します。

4. 一致する処置だけを実行

不要で clean な現存 tree は git worktree remove path、対応移動は move、外部移動後は repair を使います。

並行閲覧は detached HEAD または別 branch を使い、同じ branch 所有者を上書きしません。force は失う dirty/locked 状態を確認した後だけです。

5. 一つの所有者と結果を確認

porcelain 一覧を再実行し branch が意図した一か所だけにあることを確認します。成功済み remote merge/push ではなく失敗した local 手順だけを再試行します。

残す tree で status と commit 到達性を確認します。受入記録には所有 path、branch ref、保全 commit、変更した metadata・directory・wrapper 状態を残します。

現存・移動・欠損 worktree の処置を分けるオリジナル図。
Watch at Ease オリジナルイラスト:remove、repair、prune は別の状態を解決します。 Watch at Ease