テクノロジー · 実用ガイド
Git の index.lock が存在する?削除前に所有者を確認する
ロックは実行中の Git、クラッシュの残骸、再作成するフックや IDE、または書き込めないリポジトリに由来します。実際のパスと保持プロセスを確認し、ステージ状態を保存してから、証明できた境界だけを修復します。

index.lock は Git がインデックスを更新するための保護で、即座に削除するごみではありません。同じエラーでも、生きた書き込み、クラッシュ残骸、再作成、原子的な置換失敗があります。
実パス、ステージ状態、保持者、再発、書き込み可能性の順に証拠を集め、狭い修復を一度だけ行います。
状態を保存し、実際のロックパスを解決する
完全なエラー、git status、git diff --cached --stat を保存します。.git/index は削除しません。git rev-parse --path-format=absolute --git-path index.lock で実際のパスを取得します。
存在、所有者、権限、サイズ、更新時刻を記録します。Git は index.lock を使って新しいインデックスを構築し、確定またはロールバックします。
所有または再作成するプロセスを確認する
Linux/macOS は lsof、Windows は Process Explorer または Handle で正確なパスを検索します。停止前にプロセス、利用者、親プロセスを確認します。
保持者がいない場合は一度だけ再試行を観察します。すぐ戻るロックは IDE、フック、監視処理、重複した Git コマンドの証拠です。
確認済みの古いロックだけを削除する
実パスが正しく、保持者がなく、元の処理が終了し、すぐ再作成されない場合だけ stale と判断します。削除対象はその index.lock だけです。
git status の後に元の書き込みを一度実行し、ロック消失と git diff --cached の意図した内容を確認します。
権限と unlink の失敗を別原因として扱う
作成、rename、unlink に失敗するなら、Git ディレクトリの所有権、書き込み可能性、ファイルシステムを同じ利用者で調べます。
sudo git や広範な chown を一般解にしません。証拠が示す所有者、マウント、ウイルス対策、ポリシーの境界だけを直します。
再現可能な確認で終了する
一つの端末から元の書き込みを実行し、終了コード、ロック消失、status、cached diff を確認します。
自動化では同じインデックスへの書き込みを直列化し、開始・終了・リポジトリパスを記録します。
