itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

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

gitで削除してはダメなファイルを消した事が後から発覚した場合、
該当のファイルを復元させる方法をメモ。

↓の「del important file」のコミットで消したヤツを復元させたい!
f:id:itochin2:20130606013929p:plain

手順1.消したコミットのハッシュを取得する

$ git rev-list -n 1 HEAD -- important.txt
53599a4616710108d8fd035cf3c303a036a3c59c

「HEAD」オプションが全てのコミットを表示。
「-n 1」で表示する数を1つに絞る。
「-- <filepath>」で対象のファイルを指定できる。
SourceTreeを使ってれば、視覚的にわかるよねー。

手順2.削除対象のファイルを復元

$ git checkout 53599a4616710108d8fd035cf3c303a036a3c59c^ -- important.txt
$ ls
README.md      etc.txt        important.txt  important2.txt readme.txt

復元したファイルはステージエリアに格納されている。

手順3.復元したファイルを再度コミット

f:id:itochin2:20130606015303p:plain
無事に復元成功。
我々は過去の遺産を取り戻したのだ。

参考ページ

http://stackoverflow.com/questions/953481/restore-a-deleted-file-in-a-git-repo

Charles Baileyさん、超ありがとう。


消す前のコミットに戻ってバックアップを取り、再度コミットしなおす
っていう原始的な方法もあるけど、コマンドでスマートに出来る方がいいよね。