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

Git worktree のパスがない?prune の前に repair または lock

欠落は移動、一時オフライン、本当の削除のいずれかです。worktree ごとの HEAD と index を保存してから分類し、repair、lock、prune を選びます。

欠落 Git worktree を記録し、移動、一時オフライン、本当の削除に分けるオリジナル図。
オリジナルイラスト: オリジナル技術図:分類後に repair、lock、prune を選びます。 Watch at Ease

linked worktree の登録パスがない状態は曖昧で、メタデータ削除の許可ではありません。ディレクトリ移動、共有ストレージの切断、実際の破棄が同じ症状を作ります。

清掃前に worktree 管理ディレクトリと到達可能なファイルを保存します。その後、移動なら修復、断続ストレージならロック、真に不要な登録だけを prune します。

1. 清掃前に証拠を固定する

健全な worktree から git worktree list --porcelain -z を実行し、path、HEAD、branch、locked、prunable を保存します。共通 Git ディレクトリと対象管理ディレクトリを解決し、gitdir、HEAD、index のハッシュと静止時コピーを残します。

到達可能な作業ディレクトリと未追跡ファイルも保存します。ブランチ先端は共有履歴ですが、未ステージ内容は作業ディレクトリに、ステージ状態は個別 index にあります。

2. 欠落パスを分類する

別の場所に存在すれば移動、可搬媒体・ネットワーク共有・一時マウントならオフライン、所有者が未コミット作業も不要と確認した場合だけ本当の削除です。

prune を探索に使いません。絶対 back-pointer の不一致で、コンテナとホスト間の生きた worktree も古く見えることがあります。

3. 移動は修復し、断続パスはロックする

移動した linked worktree は新しいパスを repair に渡し、新 gitdir、HEAD、ブランチを証拠と比較します。

断続ストレージは到達可能なうちに理由付きで lock します。locked は prune を防ぎ、パス復帰と通常 Git コマンド成功後にだけ解除します。

4. ステージ状態で修復を受け入れる

status と git diff --cached を再実行し、ブランチまたは detached HEAD と通常オブジェクト読み取りを確認します。完了前に証拠コピーを上書きしません。

Git 2.51.1 検証では移動後の旧登録が prunable となり dry-run は削除を提案しました。repair は追加済みファイルのステージ状態を保持し、事前 lock 後のオフライン状態は prune 候補になりませんでした。

5. 確認済みの古い登録だけ prune する

本当に不要と証明した後、--dry-run --verbose の各候補を証拠台帳と照合してから清掃します。パスが存在するうちは worktree remove を優先します。

既に prune 済みなら追加清掃を止め、作業ファイル、共有オブジェクト、reflog を保存します。fsck は状態を報告できますが自動 undo ではありません。

作業ファイル、共有履歴、個別 HEAD・index・gitdir・lock を分けるオリジナル図。
オリジナルイラスト: オリジナル技術図:prune は個別管理状態を削除し、データごとに存続境界が異なります。 Watch at Ease