できない.dev

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 を更新する操作の間だけこのロックファイルを作り、終わると自動的に消します。
前回のコマンドが途中で落ちるとロックが残り、次の commitadd が「まだ誰かが書き込み中」と判断して止まります。

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.

よくある原因

  1. 前回の git が異常終了した: コミットメッセージのエディタを保存せず閉じた、Ctrl+C で中断した、などでロックが残る。
  2. IDE やエディタの Git 連携: VS Code などが裏で git status や自動 fetch を実行し、操作が衝突している。
  3. 別ターミナルでの進行中の操作: 大きなリポジトリの addgc が進行中で、正常に index をロックしている。
  4. 削除できない状態: 権限不足やファイルロックで git 自身がロックファイルを消せていない。

解決策

1. 進行中の git が無いか確認してから削除する

まず本当に他の git が動いていないことを確認します。
動いていれば終わるのを待つのが安全です。
動いていなければロックファイルを消します。

# まず状況を確認(必要なら ps で git プロセスを探す)
ps aux | grep git
 
# 動いている git が無いと確認できたら削除
rm -f .git/index.lock
git status

Windows のエクスプローラやコマンドからでも、リポジトリ直下の .git/index.lock を削除すれば同じです。.git フォルダが隠し属性なので表示設定に注意してください。

2. エディタ・IDE の同時実行を止める

VS Code の Git 連携や自動 fetch、常駐する Git GUI が原因のことが多いです。
一度それらを閉じる、または Git 連携を無効化してからコマンドを実行し直すと再発を防げます。

3. 中断した操作をやり直す

ロックを消しても index 自体は壊れていないのが普通です。git status で状態を確認し、commit などやり残した操作を改めて実行します。
状態が不整合に見えるときは git reset で index を作り直せます。

この記事は役立ちましたか?