@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

Git stashからdropしてしまったものを復旧する

stash popで衝突して修正している間に何をしていたか忘れてdropしてしまうというミス

git reflogでは出てこなかったが、git fsckでは出てくるとのこと。

stackoverflow.com

この回答の通り。

消してしまったコミットを探す

参照できなくなったコミットのログを一覧する。

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>

教訓

夜も更けてきたら休みましょう。