ウェブサービスを作っています。

いつ消したか忘れたファイルを元に戻す

コミットログを毎回「update」とかにしてしまったために git log してもいつ消したかわからなくなってしまった人 (自分) へ。
git log ではなく、git log --name-status を使えばいい感じになります。
(git log で変更・追加されたファイルを表示する - @yuumi3のお仕事日記)


git log の場合

commit 851a44262fbe9c1ead56a04e8d05c07f2c6afc13
Author: milk1000cc <info@example.com>
Date:   Thu Sep 4 08:55:15 2008 +0900

    update

commit c556a32b024f7ec4c7dcc1e85c5ba68a64cb9346
Author: milk1000cc <info@example.com>
Date:   Thu Sep 4 08:55:05 2008 +0900

    update

commit 793ed99ef6f5a0822b00308376260937741634cd
Author: milk1000cc <info@example.com>
Date:   Tue Sep 2 16:08:25 2008 +0900

    update

どれも同じに見える..


git log --name-status の場合

commit 851a44262fbe9c1ead56a04e8d05c07f2c6afc13
Author: milk1000cc <info@example.com>
Date:   Thu Sep 4 08:55:15 2008 +0900

    update

M       hoge.txt
M       hogehoge.txt
M       hogehogehogehoge.txt

commit c556a32b024f7ec4c7dcc1e85c5ba68a64cb9346
Author: milk1000cc <info@example.com>
Date:   Thu Sep 4 08:55:05 2008 +0900

    update

D       kesuyo.txt

commit 793ed99ef6f5a0822b00308376260937741634cd
Author: milk1000cc <info@example.com>
Date:   Tue Sep 2 16:08:25 2008 +0900

    update

M       kesuyo.txt

いつ消したかが、わかる!


つまり、元に戻したいファイルが D になってるリビジョンの 1 つ前のリビジョンをとってくればいいわけです。
ここから先は、もう少しいいやり方があればいいんですが、自分は

git checkout 793ed99ef6f5a0822b00308376260937741634cd

して、ディレクトリの状態を元に戻し、復活させたいファイルを待避させ、

git checkout master

で最新状態に戻して、待避させていたファイルを git 管理下に移動させました。


まあ、ソースコードの管理をする場合は、きちんとコミットログを書いて、こまめにコミットしましょうという話ですね。
今回の場合は、ソースコードじゃなくて書類フォルダを git で管理していて、コミットログとか面倒で...