症状

Gitで管理しているファイルを誤って削除してしまい、復元したい。

結論:まずこれを確認

  1. git status で削除がコミット済みか確認する
  2. コミット前なら git restore <ファイル名> で復元
  3. コミット後なら 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 restoregit checkout の違いは?

A: 機能は同じだが、git restore は Git 2.23 以降で追加された新しいコマンド。checkout はブランチ切り替えにも使われるため、ファイル復元専用の restore が推奨される。

関連するトラブル

準備中

解決しない場合

    
ファイルへの書き込み権限を許可していただければ、このファイルを保存します。