症状
Gitで管理しているファイルを誤って削除してしまい、復元したい。
結論:まずこれを確認
git statusで削除がコミット済みか確認する- コミット前なら
git restore <ファイル名>で復元 - コミット後なら
git checkout <コミットハッシュ> -- <ファイル名>で復元
操作フロー
flowchart TD
A[ファイルが消えた] --> B{git statusを実行}
B --> C{deleted: と表示される?}
C -->|Yes| D[まだコミットしていない]
C -->|No| E{ファイルが表示されない?}
D --> F[git restore で復元]
E -->|Yes| G[すでにコミット済み]
G --> H[git log でコミットを探す]
H --> I[git checkout で復元]
F --> J[復元完了]
I --> J
よくある原因
rmコマンドで削除した -git rmではなく通常のrmで削除した場合git rmで削除した - ステージングされた状態で削除されているgit cleanを実行した - 追跡されていないファイルが削除された(復元不可の場合あり)- ブランチを切り替えた - 別ブランチにはファイルが存在しない
- マージで削除された - コンフリクト解決時に削除された
- 過去のコミットで削除された - いつ削除されたか分からない状態
操作手順
ステップ1: 現在の状態を確認する
まず git status で削除の状態を確認する。
git status
🔍 チェックポイント: 以下のいずれかが表示される
deleted: ファイル名→ まだコミットしていない(ステップ2へ)- ファイル名が表示されない → すでにコミット済み(ステップ3へ)
ステップ2: コミット前の削除を復元する
方法A: git restore を使う(Git 2.23以降推奨)
git restore <ファイル名>
例:
git restore src/utils/helper.js
方法B: git checkout を使う(古いバージョン向け)
git checkout -- <ファイル名>
例:
git checkout -- src/utils/helper.js
🔍 チェックポイント: ls でファイルが復元されていることを確認する
ls src/utils/helper.js
ステップ3: コミット済みの削除を復元する
3-1: ファイルが存在していたコミットを探す
git log --all --full-history -- <ファイル名>
例:
git log --all --full-history -- src/utils/helper.js
🔍 チェックポイント: コミットハッシュとコミットメッセージが表示される
commit a1b2c3d4e5f6...
Author: Your Name <email@example.com>
Date: Mon Jan 15 10:00:00 2026 +0900
削除前の最後のコミットメッセージ
3-2: 特定のコミットからファイルを復元する
削除される直前のコミットからファイルを取り出す。
git checkout <コミットハッシュ>^ -- <ファイル名>
^ は「そのコミットの1つ前」を意味する。
例:
git checkout a1b2c3d4e5f6^ -- src/utils/helper.js
または、ファイルが存在していたコミットを直接指定する:
git checkout a1b2c3d4e5f6 -- src/utils/helper.js
🔍 チェックポイント: ファイルが復元され、ステージングされた状態になる
git status
new file: または modified: と表示されれば成功。
ステップ4: 復元したファイルをコミットする
git add <ファイル名>
git commit -m "restore: 削除したファイルを復元"
NG行動
git reset --hardを安易に使う - 復元したい変更以外も全て消える可能性がある- コミットハッシュを確認せずに
checkoutする - 意図しないバージョンのファイルを取り出す恐れがある git clean -fdを実行する - 追跡されていないファイルが完全に削除され、復元できなくなる
よくある質問(FAQ)
Q1: 削除したファイル名が分からない場合は?
A: git log --diff-filter=D --summary で削除されたファイルの一覧を確認できる。
git log --diff-filter=D --summary
Q2: 複数のファイルを一度に復元するには?
A: ディレクトリを指定するか、ワイルドカードを使用する。
# ディレクトリごと復元
git restore src/utils/
# パターンで復元(コミット前)
git restore '*.js'
Q3: git restore と git checkout の違いは?
A: 機能は同じだが、git restore は Git 2.23 以降で追加された新しいコマンド。checkout はブランチ切り替えにも使われるため、ファイル復元専用の restore が推奨される。
関連するトラブル
準備中
解決しない場合
- Git公式ドキュメント - git-restore
- Git公式ドキュメント - git-checkout
- 確認すべきログ:
git reflogで過去の操作履歴を確認 - 次に調べるキーワード: 「git reflog 復元」「git fsck –lost-found」
ファイルへの書き込み権限を許可していただければ、このファイルを保存します。