事の起こり
編集途中のものを一旦 stash
した。それから rebase
したりブランチを削除したりして最後にstashしたものを戻そう(stash pop
)しようとら、stashしたものがない。stash list
に何も出てこない。
stash
した時のブランチを削除したから?
対応
git fsck
で追跡不能なリビジョンを表示する。
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (3778/3778), done.
dangling commit d8c140de7dbe0f0695790e94631f9f4c041ede54
dangling tag bb4efddf60954be66b6cfd7235d14bf2635264c2
dangling tag 6bf9af0329e00ab9661781147ca34e7b39070975
"dangling 何とか" というのが追跡不能なリビジョンらしい。
これらのリビジョンのアーカイブを作る
$ git archive --format=zip d8c140d -o rev_d8c140d.zip
$ git archive --format=zip bb4efdd -o rev_bb4efdd.zip
$ git archive --format=zip 6bf9af0 -o rev_6bf9af0.zip
で、そのアーカイブを展開してワークツリーと比較して(WinMergeを使った)差分から d8c140d が行方不明になっていたstashしたものらしいと判断した。
もっといい方法があるのかもしれないが、自分の頭ではこれが限界。
参考ページ
誤って削除した git stash を戻す | deadwood
Gitを使いこなすための20のコマンド | OSDN Magazine
Git - git-fsck Documentation