Gitで削除したファイルを復元する簡単な方法

「あのファイル過去に削除しちゃったけど、実は必要だった」「あの消しちゃったプログラムを改造して、新しいプログラムを作りたい」。Gitで削除したファイルを復元する簡単な方法のご紹介です。

Gitはすべてのファイルとディレクトリの変更履歴を持っています。ですので、必要なことは、過去の状態に戻す方法と、ファイルを削除したコミットのひとつ前のコミットを知ることです。

ファイルを削除したコミットのひとつ前のコミットIDを見つける

git logコマンドで、過去のコミットを見ることができます。

git log
commit 23cd914d4f7087a01a1d23c66edc98026013102d
Author: Kimoto Yuki <kimoto.yuki@google.com>
Date:   Wed Nov 25 10:20:34 2020 +0900

    不要な○○ファイルを削除

commit a15a73d62711fd9a5469ae7791241a4fd8978537
Author: Kimoto Yuki <kimoto.yuki@google.com>
Date:   Wed Nov 25 10:20:34 2020 +0900

    ヘッダーを修正

ファイル消す前のコミットID「a15a73d...」がすぐに見つかればそれでOKです。

消したのが、だいぶ前だった場合、コミットメッセージをたどるのは大変です。そのような場合は、コミットメッセージを検索しましょう。コミットメッセージは、思い出す必要がありますよ。

git log --grep 削除

コミットメッセージに「〇〇を削除」みたいなのを入れておいた場合は、これで検索できます。

このコミットのコミットIDを取得しましょう。

commit 23cd914d4f7087a01a1d23c66edc98026013102d
Author: Kimoto Yuki <kimoto.yuki@google.com>
Date:   Wed Nov 25 10:20:34 2020 +0900

    不要な○○ファイルを削除

Gitでは、一つ前のコミットIDというのを「コミットID^」で表現できます。

# 一つ前のコミットのコミットID
23cd914d4f7087a01a1d23c66edc98026013102d^

ブランチを作成してチェックアウト

上記のコミットIDから新しいブランチを作りましょう。ここでは名前は「old」とします。

git branch old 23cd914d4f7087a01a1d23c66edc98026013102d^

git checkoutして、ブランチを切り替えます。

git checkout old

古いファイルがあるかを見つけて、どこかにコピーしましょう。そして、元のブランチに戻ります。

Perl開発者のためのGit入門のご紹介

Perlテキスト処理と正規表現の基礎を学ぶ
講座作成
Perlテキスト処理のエッセンス