Git stashからdropしてしまったものを復旧する
stash popで衝突して修正している間に何をしていたか忘れてdropしてしまうというミス
git reflog
では出てこなかったが、git fsck
では出てくるとのこと。
この回答の通り。
消してしまったコミットを探す
参照できなくなったコミットのログを一覧する。
macならこのコマンドで
git log --graph --oneline --decorate --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
windowsだとこれ(未確認)
git log --graph --oneline --decorate --all $(git fsck --no-reflog | select-string 'dangling commit' | foreach { $bits = $_ -split ' '; echo $bits[2];})
WIP on ブランチ名:
みたいなメッセージの付いているものがstashに入っていたものの可能性が高い。
コミットのハッシュを見つけたら内容はgit show <sha1 hash>
で確認する。
差分を適用する
正しいコミットを見つけたら適用する
git stash apply <sha1 hash>
教訓
夜も更けてきたら休みましょう。