問題の発生3時間にわたるコーディング作業を終え、いざコミットしようとした時に、厄介なエラーに阻まれることがあります。VS Codeのソース管理パネルでチェックマークをクリックするか、git commitを実行した際、成功メッセージの代わりに次のような表示が出ることがあります。
fatal: Unable to create '.git/index.lock': File exists.
このエラーが発生すると、ワークフローが完全に停止してしまいます。解決するまで、ファイルのステージング、ブランチの切り替え、更新のプルなどが一切できなくなります。
エラーの原因は?Gitは、安全装置としてindex.lockという0バイトの小さなファイルを使用します。これを「起こさないでください(作業中)」のサインと考えてください。これにより、VS Codeのバックグラウンド同期や手動のターミナルコマンドなど、一度に一つのプロセスだけがリポジトリを変更できるように制限しています。これは、更新の重複によるデータの破損を防ぐための仕組みです。
通常、Gitはこのファイルを作成し、数ミリ秒でタスクを完了して、すぐにファイルを削除します。しかし、プロセスがクラッシュしたり中断されたりすると、ロックファイルが残ったままになります。これは、コミットしようとした瞬間にVS Codeの「自動フェッチ」が走ったり、大容量のgit pullの実行中にノートPCがスリープ状態になったりした場合によく発生します。
解決策1:手動でのクリーンアップ最も手っ取り早い解決策は、残されたロックファイルを単に削除することです。ファイルを作成した元のプロセスはおそらく既に終了しているため、削除することでGitにリポジトリが再び利用可能であることを伝えます。
VS Codeターミナルの使用統合ターミナル(Ctrl + `)を開き、お使いのOSに合わせて次のコマンドを実行してください:
macOS または Linux:
rm .git/index.lock
Windows (PowerShell):
del .git/index.lock
注意:もし「アクセスが拒否されました(Permission Denied)」というエラーが出る場合は、VS Codeを完全に閉じてから、ターミナルを「管理者として実行」する必要があるかもしれません。
解決策2:ゴーストプロセスの強制終了ファイルを削除しようとしても「ファイルが使用中」というエラーが出る場合があります。これは、Gitのプロセスがバックグラウンドでまだ動いており、ファイルを掴んだままになっていることを意味します。そのプロセスを強制終了させる必要があります。
Windows- Ctrl + Shift + Esc を押してタスクマネージャーを開きます。- git.exe または Git for Windows を探します。Gitが動かなくなっている場合、複数のインスタンスが表示されることがあります。- それぞれを右クリックし、「タスクの終了」を選択します。### macOS/Linux- ターミナルで次のコマンドを実行してプロセスID(PID)を見つけます:ps aux | grep git- PID(通常は 4021 のような4桁または5桁の数字)を確認します。- プロセスを強制終了します:kill -9 <PID>## 解決策3:VS Codeの自動フェッチの設定変更このエラーが頻繁に発生する場合、VS Codeの「自動フェッチ(Auto Fetch)」が原因の可能性が高いです。デフォルトでは、VS Codeはリモートの変更を確認するために3分ごとに git fetch を実行します。このバックグラウンド処理が手動コマンドと重なると、ロックの競合が発生します。
この機能を無効にするには:
- 設定を開きます(Ctrl + ,)。-
git.autofetchを検索します。- チェックボックスをオフにします。これで、リモートの更新を確認するにはソース管理ビューの更新アイコンをクリックする必要がありますが、ファイルロックによるトラブルは大幅に減少します。
確認作業ファイルを削除した後、git status を実行してGitが正常に戻ったか確認してください。エラーなしでブランチ情報が表示されれば準備完了です。念のため、テストコミットを試してみましょう:
git add .
git commit -m "ロック修正のテスト"

