【Git】Unlink of file failed. Should I try again? の原因と対処法|OS別・操作別に完全解説

【Git】Unlink of file failed. Should I try again? の原因と対処法|OS別・操作別に完全解説 Git

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)
キーワード 意味
Unlinkファイルシステムからファイルを削除する操作(POSIX系のunlink()システムコール)
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操作によって、対処の手順が少し異なります。

Git操作 対処手順
checkout(ブランチ切替)エディタを閉じてから git checkout ブランチ名 を再実行
pullエディタを閉じて git pull を再実行。権限エラーの場合は chown で修正してから再度pull
mergeエディタを閉じて git merge --continue または最初からmergeをやり直す
rebaseエディタを閉じて git rebase --continue。復旧が難しい場合は git rebase --abort で中断
gc(ガベージコレクション)全エディタを終了 → PCを再起動 → git gc 再実行

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.jspack-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 の対処ポイント

最も多い原因はエディタ・IDEのファイルロック → まずエディタを閉じる
✅ Linux/Macでは 権限問題 を確認 → sudo chown -R $(whoami) .
✅ Windowsでは ウイルス対策・クラウド同期 の干渉も疑う
✅ ロック元の特定には Process Explorer(Windows)や lsof(Mac/Linux)を使う
✅ 予防策として gc.auto の制御 と VS Codeの watcherExclude 設定が有効

「Unlink of file failed」は、ファイルロックが原因のほとんどです。エディタを閉じるだけで解決するケースが多いですが、それでもダメな場合はこの記事のフローチャートに沿って原因を特定してみてください。

Gitのエラー対処法について、よくある他のエラーも確認しておきましょう。「error: failed to push some refs to」の解決法pull時の「untracked working tree files would be overwritten」対処方法untracked filesの解消方法も参考にしてください。