🔖

ローカルで削除したファイルがgit pullしても復元されないときの対処法

に公開

はじめに

ローカルでファイルを間違って削除してしまいました。

「git pull すれば復元するだろう」と思って実行しましたが、
ファイルは復元されませんでした

本記事は、そんなときの 初心者向けの安全な対処法をまとめたものです。

起きている状況

今回の状況は、次のようなものです。

  • ローカルでファイルを削除してしまった
  • リモートリポジトリには、まだそのファイルが存在している
  • git status を実行すると、削除したファイルが deleted: と表示されている
git status
deleted: path/to/file

なぜ git pull では復元しないのか

git pull は、

  • リモートの変更履歴を取得する
  • ローカルブランチにマージする

という動作を行います。

ローカルで行った変更(今回の場合はファイル削除)を、強制的に上書きすることはしません。

そのため、

  • ローカルで削除済み
  • Git的には「変更がある状態」

となっている場合、git pull を実行してもファイルは復元されません。

また、リモートに「ファイルを復元する新しいコミット」がない限り、pullしても何も取得されません。

正しい復元方法

削除したファイルだけを、リモートの状態から復元します。

1. リモート情報を最新にする

git fetch origin

2. ファイルを復元する

git restore --source=origin/ブランチ名 -- path/to/file
  • ブランチ名:復元元のブランチ(例:main, develop)
  • path/to/file:削除してしまったファイルのパス

これで、リモートにあるファイルの内容がローカルに復元されます。

古いバージョンのGitを使っている場合は、次のコマンドで復元できます。

git checkout origin/ブランチ名 -- path/to/file

3. 復元できたか確認

git status

deleted: の表示が消えていれば成功です。

ディレクトリごと復元したい場合

複数ファイルをまとめて復元したい場合は、ディレクトリ単位でも可能です。

git restore --source=origin/ブランチ名 -- path/to/dir/

最終手段(注意)

「ローカルの変更はすべて不要で、リモートと完全に同じ状態にしたい」場合は、次の方法もあります。

git fetch origin
git reset --hard origin/ブランチ名

⚠️ この操作は、未コミットのローカル変更をすべて破棄します。
内容を理解した上で、最後の手段として使用してください。

まとめ

  • git pull では、削除したファイルは自動では復元されない
  • git statusdeleted: と出ている場合は、git restore で安全に復元できる
  • git reset --hard は強力なので、使う前に一度立ち止まる

間違ってファイルを消してしまっても、落ち着いて対処すれば復元できます。

本記事が参考になれば幸いです。

Discussion