🔖
ローカルで削除したファイルが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 statusでdeleted:と出ている場合は、git restoreで安全に復元できる -
git reset --hardは強力なので、使う前に一度立ち止まる
間違ってファイルを消してしまっても、落ち着いて対処すれば復元できます。
本記事が参考になれば幸いです。
Discussion