Git で「Unable to create '.git/index.lock': File exists」が解決できない
別の git プロセスが残したロックファイル `.git/index.lock` が存在すると commit や add が失敗する。
動いている git が無いことを確認してからロックファイルを削除すれば復旧する。
#git#index-lock#commit#lock
公開: 更新:
要約
fatal: Unable to create '/path/to/repo/.git/index.lock': File exists. は、git がインデックス(ステージング領域)を書き換える前に作る一時ファイル .git/index.lock が、すでに存在しているために起きます。
git は index を更新する操作の間だけこのロックファイルを作り、終わると自動的に消します。
前回のコマンドが途中で落ちるとロックが残り、次の commit や add が「まだ誰かが書き込み中」と判断して止まります。
fatal: Unable to create '/path/to/repo/.git/index.lock': File exists.
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again.よくある原因
- 前回の git が異常終了した: コミットメッセージのエディタを保存せず閉じた、
Ctrl+Cで中断した、などでロックが残る。 - IDE やエディタの Git 連携: VS Code などが裏で
git statusや自動 fetch を実行し、操作が衝突している。 - 別ターミナルでの進行中の操作: 大きなリポジトリの
addやgcが進行中で、正常に index をロックしている。 - 削除できない状態: 権限不足やファイルロックで git 自身がロックファイルを消せていない。
解決策
1. 進行中の git が無いか確認してから削除する
まず本当に他の git が動いていないことを確認します。
動いていれば終わるのを待つのが安全です。
動いていなければロックファイルを消します。
# まず状況を確認(必要なら ps で git プロセスを探す)
ps aux | grep git
# 動いている git が無いと確認できたら削除
rm -f .git/index.lock
git statusWindows のエクスプローラやコマンドからでも、リポジトリ直下の .git/index.lock を削除すれば同じです。.git フォルダが隠し属性なので表示設定に注意してください。
2. エディタ・IDE の同時実行を止める
VS Code の Git 連携や自動 fetch、常駐する Git GUI が原因のことが多いです。
一度それらを閉じる、または Git 連携を無効化してからコマンドを実行し直すと再発を防げます。
3. 中断した操作をやり直す
ロックを消しても index 自体は壊れていないのが普通です。git status で状態を確認し、commit などやり残した操作を改めて実行します。
状態が不整合に見えるときは git reset で index を作り直せます。