Gitでブランチ切り替えやpull、rebase中に「Unlink of file ‘xxx’ failed. Should I try again? (y/n)」というメッセージが突然表示されて困ったことはありませんか?
このエラーは、Gitが操作のためにファイルを削除・移動しようとしたものの、別のプログラムがファイルをロックしていたり、権限が足りなかったために失敗したことを意味します。この記事では、エラーの原因をOS別・操作別に整理し、状況に合った最適な解決方法を解説します。
この記事で分かること
- 「Unlink of file failed」エラーの意味と仕組み
- 5つの原因(ファイルロック・権限・ウイルス対策・OneDrive・packファイル)
- OS別の対処法(Windows / Mac / Linux)
- 操作別の対処法(checkout / pull / merge / rebase / gc)
- 再発を防ぐ予防策と設定
エラーメッセージの意味
まず、エラーメッセージの内容を正確に理解しましょう。
エラーメッセージ例
Unlink of file 'src/index.js' failed. Should I try again? (y/n)
つまりこのエラーは、「Gitが対象ファイルを削除しようとしたが、何らかの理由で削除できなかった」ことを示しています。原因を解消しないままyを連打しても解決しないケースがほとんどです。
Unlink of file failed が発生する5つの原因
このエラーが発生する原因は主に以下の5つです。
原因1:エディタ・IDEがファイルを開いている(最も多い)
VS Code、IntelliJ IDEA、EclipseなどのエディタやIDEがファイルを開いたままの状態でGit操作を行うと、ファイルがロックされてエラーになります。特にWindowsでは、ファイルを開いているプロセスがある限り削除できないため、この問題が頻発します。
対処法
① エディタ / IDE を完全に閉じる(最小化ではなく終了)
② ターミナルでGit操作を再実行する
③ VS Code を使っている場合、統合ターミナルではなく外部ターミナルから実行するのも有効
原因2:ファイルの権限問題(Linux / Mac)
過去にsudoでGitコマンドを実行してしまうと、ファイルの所有者がroot(スーパーユーザー)に変わります。その後、通常ユーザーでGit操作をしようとすると権限不足でUnlinkに失敗します。
権限の確認と修正(Linux / Mac)
# ファイルの所有者を確認 ls -la src/index.js # 出力例(root所有になっている) -rw-r--r-- 1 root root 1234 Mar 1 12:00 src/index.js # 所有者を現在のユーザーに変更(再帰的に全体を修正) sudo chown -R $(whoami):$(whoami) . # ファイルのパーミッションを修正 chmod -R 755 .
予防:Gitでsudoを使わない
sudo git pullのようにGitコマンドにsudoを付けると、生成・更新されるファイルがroot所有になります。Gitコマンドは原則としてsudoなしで実行してください。権限エラーの対処法は「Permission denied (publickey) エラーの解決方法」も参照してください。
原因3:ウイルス対策ソフトの干渉(Windows)
Windows Defenderや他のウイルス対策ソフトが、Gitが操作しようとしたファイルをリアルタイムスキャン中にロックしてしまうことがあります。
対処法
① Windows Defenderの設定で、リポジトリのフォルダを「除外」に追加する
Windows セキュリティ → ウイルスと脅威の防止 → 設定の管理 → 除外
② 一時的にリアルタイム保護を無効化してGit操作を実行し、終了後に再度有効化する
原因4:クラウド同期(OneDrive / Dropbox / Google Drive)
リポジトリをOneDriveやDropboxなどのクラウド同期フォルダ内に配置していると、同期プロセスがファイルをロックしてGit操作が失敗します。
対処法
① リポジトリをクラウド同期フォルダの外に移動する(推奨)
② 同期対象フォルダからリポジトリを除外設定する
③ 移動が難しい場合は、Git操作中だけ同期を一時停止する
原因5:.git/objects/pack ファイルの問題
git gc(ガベージコレクション)実行中にエラーが出る場合は、.git/objects/pack/ディレクトリ内のpackファイルが別プロセスにロックされていることが原因です。VS Codeの拡張機能やEclipseのGitプラグインがバックグラウンドでpackファイルを読み込んでいることがあります。
packファイルのエラー例
Unlink of file '.git/objects/pack/pack-abc123...def.pack' failed. Should I try again? (y/n)
対処法
① すべてのエディタ・IDEを完全に終了する
② 外部ターミナルを新規に開き、git gc を再実行する
③ それでも解決しない場合はPCを再起動してからgit gcを実行
Git操作別の対処法(checkout / pull / merge / rebase / gc)
エラーが発生するGit操作によって、対処の手順が少し異なります。
rebase中にエラーが発生した場合の詳しい復旧手順は「リベース途中でエラーになったときの復旧方法」で解説しています。
Unlink エラーの原因プロセスを特定する方法
「どのプログラムがファイルをロックしているかわからない」という場合は、以下の方法で特定できます。
Windows:Process Explorer(Microsoft公式ツール)
Process Explorer でファイルロックを調査
1. Process Explorer をダウンロード・起動 https://learn.microsoft.com/sysinternals/downloads/process-explorer 2. Ctrl+F で「Find Handle or DLL」を開く 3. エラーメッセージに表示されたファイル名を入力して検索 例: index.js や pack-abc123.pack 4. 該当プロセスを特定して終了する
Windows:PowerShell で調べる(ツール不要)
PowerShell — ファイルをロック中のプロセスを特定
# ハンドルを検索(管理者権限のPowerShellで実行) handle.exe index.js # handleがない場合はopenfilesコマンドも使える openfiles /query /fo csv | findstr "index.js"
Mac / Linux:lsof コマンド
Mac / Linux — lsof でファイルを使用中のプロセスを特定
# ファイルを使用しているプロセスを検索 lsof src/index.js # .git ディレクトリ内のロックを確認 lsof +D .git/objects/pack/ # 特定のプロセスを終了(PIDは lsof の結果で確認) kill -9 <PID>
トラブルシューティングフローチャート
エラーが出た場合、以下の手順で順番に対処してください。
STEP 1:エディタ・IDEを閉じる
VS Code、IntelliJ、Eclipseなどを完全に終了してからGit操作を再実行
STEP 2:ロック元のプロセスを特定
Process Explorer(Windows)または lsof(Mac/Linux)で原因プロセスを確認・終了
STEP 3:ウイルス対策・クラウド同期を確認
Windows Defenderの除外設定、OneDrive / Dropbox の同期停止を試す
STEP 4:権限を確認(Linux / Mac)
ls -la で所有者を確認 → sudo chown -R $(whoami) . で修正
STEP 5:PCを再起動
再起動ですべてのファイルロックが解除される。その後Git操作を再実行
Unlink of file failed を再発させない予防策と設定
git gc の自動実行を制御する
Gitは一定のオブジェクト数に達すると自動的にgit gc --autoを実行します。これが予期しないタイミングでロックエラーを引き起こすことがあります。
gc.auto の設定
# 自動gcを無効にする(手動でgc管理する場合) git config gc.auto 0 # 閾値を上げる(デフォルトは6700) git config gc.auto 10000 # 確認 git config --get gc.auto
Windowsでの推奨設定
Windows 環境向けの推奨Git設定
# core.longpaths: 260文字のパス長制限を回避(深い階層のプロジェクト向け) git config --global core.longpaths true # core.protectNTFS: NTFSの予約名ファイルの保護 git config --global core.protectNTFS true # pack.threads: パック処理のスレッド数を制限(ロック競合を減らす) git config --global pack.threads 1
VS Code でのファイルロック軽減
VS Codeの設定でfiles.watcherExcludeに.gitディレクトリを追加すると、VS Codeがpackファイルを監視しなくなりロック問題が軽減されます。
VS Code settings.json に追加
{
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true
}
}
補足:.git/index.lock ファイルの残留
Unlinkエラーと混同しやすい問題として、.git/index.lockファイルの残留があります。Git操作がクラッシュや強制終了で中断されると、ロックファイルが残ったままになりfatal: Unable to create '.../.git/index.lock': File existsというエラーが出ます。
index.lock の削除
# ロックファイルを削除(Git操作が完全に終了していることを確認してから) rm .git/index.lock # Windowsの場合 del .gitindex.lock
補足:WSL環境での注意点
WSL(Windows Subsystem for Linux)からWindowsのファイルシステム(/mnt/c/以下)にあるリポジトリを操作すると、ファイルロックの仕組みが異なるためUnlinkエラーが発生しやすくなります。WSLを使う場合は、WSL内のネイティブファイルシステム(~/projects/など)にリポジトリを配置することを推奨します。
どうしても解決しない場合の最終手段
上記のすべてを試しても解決しない場合は、以下の方法を検討してください。
最終手段:リポジトリの再クローン
# 1. 作業中の変更をパッチとして保存 git diff > ~/my-changes.patch # 2. 別の場所にクローンし直す cd .. git clone <リモートURL> my-project-new # 3. パッチを適用 cd my-project-new git apply ~/my-changes.patch
注意:未コミットの変更を忘れずに保存
再クローンの前に、git stashやパッチでの保存を忘れると作業中の変更が失われます。消したファイルの復元方法は「Git 消したファイルを戻す方法」で解説しています。
まとめ
Unlink of file failed の対処ポイント
sudo chown -R $(whoami) .
「Unlink of file failed」は、ファイルロックが原因のほとんどです。エディタを閉じるだけで解決するケースが多いですが、それでもダメな場合はこの記事のフローチャートに沿って原因を特定してみてください。
Gitのエラー対処法について、よくある他のエラーも確認しておきましょう。「error: failed to push some refs to」の解決法、pull時の「untracked working tree files would be overwritten」対処方法、untracked filesの解消方法も参考にしてください。

