1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gitで過去コミットで消してしまったファイルを取り戻す

Last updated at Posted at 2024-10-04

はじめに

あれ??以前存在したファイルが消えてしまってる???
前に使ってたファイル消してしまったけど、復元して〜!
なんて事ありませんか?

そんな時の対処法です!!

ファイルが消されたcommitを見つけよう

削除されたファイルを含むコミットを検索

git log --diff-filter=D --summary
  • 誰が変更したのかなどを気にする必要がないのであれば、
    git logの後ろに--onelineを追加すると見やすくなります

  • また、ファイル名が明確にわかっているのであれば、
    一番最後に-- "ファイル名"で検索することも可能です(ワイルドカード可)

例: 間違えて消したexample.txtを復元する

git log --oneline --diff-filter=D --summary -- "*example.txt"
810d535 (HEAD -> main, origin/main) delete example.txt
 delete mode 100644 Qiita/example.txt

今回はexample.txtという情報だけを記憶していてどこにあるものだったか忘れていたため*example.txtとしました。

するとQiita/example.txtを消した履歴が出てきました

ここでいう810d535が下で言う<コミットハッシュ>にあたります

ファイルを復元しよう

git checkoutを使用してファイルを復元します。<コミットハッシュ>には先ほど検索したものを使用してください

git checkout <コミットハッシュ>^ -- <ファイル名>

^を使用してファイルが削除されたコミットの一つ前のコミットから復元している

例: Qiita/example.txtを復元

git checkout 810d535^ -- Qiita/example.txt

補足

ファイル限定ではなくディレクトリの復元も可能です

例: Qiitaディレクトリを消してしまった。

ディレクトリの中身が下記のようなQiitaディレクトリを消してしまっていたとしましょう

cd Qiita/
ls
example.txt	example2.txt	example3.txt

ファイルと同様に、ディレクトリを消したコミットを見つけます

git log --oneline --diff-filter=D --summary -- "*Qiita/**"
e382d54 (HEAD -> main, origin/main) Qiita/の削除
 delete mode 100644 Qiita/example.txt
 delete mode 100644 Qiita/example2.txt
 delete mode 100644 Qiita/example3.txt

ファイルを復元

git checkout e382d54^ -- Qiita/
  • 実際にgitで追跡されているのはファイルであり、ディレクトリではありません。そのため、空のディレクトリは復元できません

  • ディレクトリが完全に削除されたのではなく、ファイルの一部だけが削除された場合、削除されたファイルのみが復元されます

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?