雑記帳
2016-12-21 (Wed) [長年日記]
■ [git] stageしてcommitする前に消してしまったファイルを復活させる
作業中に、誤って必要なファイルを消してしまった。不要なファイルをgit rmしようとして、ついうっかり別の必要なファイルをgit rmしてしまった。しかも、そのファイルは新規の未コミットで、git addを使ってstageした状態のファイルだった。実際に削除する前に警告が出たものの、気がつかずに消してしまった後に気がついて、慌ててしまった。
しかし、幸いgit addしていたため、objectとしては残っているはずと思って、探そうと思った。そして見つけたのがこれ。
利用したのは、resolvedされている長い方の回答ではなく、もう一つの方。下記のようなスクリプトが書いてある。
for b in $(git fsck --lost-found | grep blob | awk '{print $3}'); do git cat-file -p $b | grep -q ${UNIQUE_CODE} && echo $b; done
これは、git fcsk --lost-foundを使って、commitからは辿れないオブジェクトを探す。それらをgit cat-fileして、UNIQUE_CODE に指定した、探しているコードに含まれているはずのテキストをgrepするというもの。
このコードを使って、消してしまったobjectのhash値が得られるので、git cat-file -p <hash> を実行して、中身を取り出すことができる。これで取り戻すことができた。
こういうことができるのが、gitのいいところである。