Gitで誤って削除・編集したファイルを復元する方法

Git

 ファイルを元の状態に戻したい!

その時はいらないと思って削除したファイルや一時的に編集し前の状態を忘れて元に戻せなくなってしまったファイルなどありますよね。

こんなときにGitを使っていないともう完全な状態に復元することは諦めるしかありません。

バックアップなどがあればいいですが、ない場合は記憶を頼りに復元することになりかなり絶望的です。

こんな時、Gitを使用して管理してれば簡単に元の状態に復元することができるのです。

 

変更をステージに追加する前

git addで変更をステージに追加する前の状態でのファイルの復元方法について確認していきます。

 

例えば、現在hoge.txtが追加されてGitで管理されている状態だとします。

$ echo "hogehoge" > hoge.txt

$ git add hoge.txt 

$ git commit -m "hogehoge"

 

ファイルを削除してしまった場合

ファイルを削除してしまった場合について見ていきましょう!

 

例えば作業をしている最中にhoge.txtが不要ということなので削除したとします。

$ rm hoge.txt

 

しかし、担当者の方から、「ごめん、やっぱhoge.txtひつようだったわw」と言われるような状況ってありますよね!

「なんだよ、今消しちゃったよ!どうしてくれんだ!」ってなると思いますが、ちゃんとGitで管理していれば大丈夫!

以下のコマンドで簡単に復元できます!

$ git checkout hoge.txt

 

これで完全に復元できましたね!

 

ファイルを編集してしまった場合

ファイルを編集してしまった場合も同様にできるんです!

 

hoge.txtを編集してみましょう!

ファイルを開いてhogehogehogeを追加します。

$ vi hoge.txt 
---------------------
hogehoge
hogehogehoge
---------------------

 

しかし「やっぱりhogehogehogeいらなかったわ…」ってなる時あるですよね。

その際もこのコマンドで簡単に編集前の状態に戻すことができます!

$ git checkout hoge.txt

 

ちゃんと編集前の状態戻っていることがわかりますね!

$ git checkout hoge.txt

$ cat hoge.txt 
---------------
hogehoge
---------------

 

 

このようにステージに追加する前の状態で、変更前の状態にファイルを戻したいときはいずれも以下のコマンドで簡単にできることがわかりました!

$ git checkout hoge.txt

 

commitした後

既に遥か昔にファイルを削除してコミットしてしまっていたり、ファイルを編集してコミットしてしまっていた場合の復元方法について確認していきましょう!

特定のコミット地点にファイルを戻す方法

例えば、以下のようにいくつか編集を加えてしまった状況でファイルを復元する方法を確認していきましょう!

# hoge2.txtを追加
$ echo "hogehoge2" > hoge2.txt

# hogehogehogeを追加
$ vi hoge.txt 
---------------------
hogehoge
hogehogehoge
---------------------

$ git add .
$ git commit -m "hogehogehoge"


$ rm hoge2.txt 

$ git add .
$ git commit -m "hogehogehogehoge"

 

このような状況で

  • 削除したhoge2.txtを復元したい
  • hoge.txthogehoge一行だけだった状態に戻したい

このような状況を考えていきましょう!

 

削除してしまったファイルの復元

まずgit logで戻したい地点のコミットIDを確認します。

$ git log
commit 94697495ef0ca782897d26421e40f2b52ec6f8bf
Author: me <me@me.com>
Date:   Wed Mar 6 02:24:10 2019 +0900

    hogehogehogehoge

commit 30c5d8f7fe8f9d7a4c6d57a464391dd3855e4688
Author: me <me@me.com>
Date:   Wed Mar 6 02:23:58 2019 +0900

    hogehogehoge

commit b08a643e981e07b4c46afc1c73aa3472cb778851
Author: me <me@me.com>
Date:   Wed Mar 6 02:06:57 2019 +0900

    hogehoge

 

-pのオプションをつけると、変更内容も確認できるので、削除されたファイルを戻すには、ファイルが削除される前のコミットID(30c5d8f7fe8f9d7a4c6d57a464391dd3855e4688)に戻せば良いことがわかります。

$ git checkout 30c5d8f7fe8f9d7a4c6d57a464391dd3855e4688 .

$ ls -l hoge2.txt 
-rw-rw-r-- 1 ubuntu ubuntu 10  3月  6 02:31 hoge2.txt

 

hoge2.txt復元されたことがわかりましたね!成功です!

 

編集してしまったファイルの復元

ファイルの編集も同様です。

ファイルが編集される前のコミットID(b08a643e981e07b4c46afc1c73aa3472cb778851)に戻せば良いことがわかります。

以下のようにして、ファイルを編集前の状態に戻しましょう!

$ git checkout b08a643e981e07b4c46afc1c73aa3472cb778851 hoge.txt

$ cat hoge.txt 
---------------------
hogehoge
---------------------

 

 

このようにcommitした後の状態で、変更前の状態にファイルを戻したいときはいずれも以下のコマンドで簡単にできることがわかりました!

$ git checkout {コミットID} [ファイル名 または .]

 

 

いかがでしたでしょうか?

誤ってファイルを削除してしまった場合や編集してしまった場合にも即座に復元できれば、安心して作業できますよね

 

 

誤ってコミットしたファイルを元に戻したい!」なんて場合に元の状態に戻す方法は以下の記事に紹介していますので、こちらも覚えておくと安心です。

Gitで誤ってコミットしたファイルをaddの前の状態に戻したいとき

 

Gitを最短でマスターする方法

Gitの書籍でマスターする

Gitが、おもしろいほどわかる基本の使い方33〈バージョン管理、SourceTree、Bitbucket〉

この書籍は、プログラミングを初めたばかりの初心者やGitをコマンド操作ではなく、SourceTreeというツールで簡単に初めたい方にオススメです。

Gitをコマンド操作すると言われてコマンドって何?と思う方は是非この本からGitの基礎を学ぶことをオススメします!

イラスト、図、実際の操作画面が豊富に使用されていますので、わかりやすさも抜群です!

 


Gitが、おもしろいほどわかる基本の使い方33〈バージョン管理、SourceTree、Bitbucket〉

 

独習Git

この本は基礎から実際のプロジェクトでの活用方法までのガッツリ習得したい方向けとなっています。

プログラミングを学び初めて半年以上の方や仕事でプログラミングをやっている方が一からGitを学ぶ場合にオススメの書籍です。


独習Git

Udemyの講座でマスターする

もう怖くないGit!チーム開発で必要なGitを完全マスター

僕は最初ネットの記事などを見てGitを使っていたのですが、基礎からしっかりとGitをマスターしたいと思い、こちらの講座を受講しました!

内容的には、プログラミング初心者でも経験者でもGitを一から学びたいという方はオススメです!

こちらの講座はGitをコマンドラインで進めていくのですが、Gitを難しい部分をイメージできるようにイラストや図で詳しく解説されていて、addcommitが裏で何をしているのかまで詳しく理解できるようになります!

どうしても書籍のほうがいい!というこだわりがなければ、udemyの動画であれば実際に手を動かさなくても、ただ動画を見るだけで理解ができてしまうのでオススメです。

忙しくて勉強時間をなかなか取れない方など、隙間時間に動画をみて、空いた時間で実際に手を動かしてやってみるなど工夫すると最速でGitが理解できるのでオススメです!

※こちらの画像をクリックするとUdemyの講座のページへ飛ぶことができます!

 

その他にもオススメのGit講座を紹介しておきますね!

 

Git入門: ノンプログラマーのための Git

こちらはUdemyでのベストセラーになっているぐらい高評価の講座となっています!

 

Git & Github基礎講座

GitもGithubも一緒に基礎から学習することができます!

 

コメント