[Git] 誤って削除した git stash を戻す

git stash drop や clear の間違いを戻します。

最近、まじめに branch をまたぎながら開発を進めていて、git stash を使うようになりました。

git stash すると、変更内容がスタックに保存されます。
作業完了後、git stash drop などで削除します。
ここで間違った場合の復旧方法。

スタック削除の手順

スタックを確認。

% git stash list
stash@{0}: WIP on feature/issue#2: 3232ce5 fix: install bug
stash@{1}: WIP on feature/issue#2: 4364647 update: config files

不要なスタックを削除しますが、ここで間違ったスタックを削除してしまいました。

% git stash drop stash@{0}
Dropped stash@{0} (56d84e2e6a648f45a631305b231e72e740f28575)

スタック復旧の手順

困っていたところ、こちらで解決方法を教えて頂きました。

git fsck でどこからもたどることができないコミットを探し、 その出力を編集して git log で探す。

% git fsck --unreachable | grep commit | cut -d\ -f3 | xargs git log --merges --no-walk --grep=WIP
Checking object directories: 100% (256/256), done.
Checking objects: 100% (539/539), done.
commit 56d84e2e6a648f45a631305b231e72e740f28575
Merge: 3232ce5 31f7e6b
Author: **** <****@****.com>
Date:   Thu Feb 12 13:40:27 2015 +0900
    WIP on feature/issue#2: 3232ce5 fix: install bug
commit 49eb0907901afc152e36c69d508d42bc215f6b05
Merge: 4364647 52927f8
Author: **** <****@****.com>
Date:   Thu Feb 12 11:43:27 2015 +0900
    WIP on feature/issue#2: 4364647 update: config files

必要なコミットの SHA-1 を指定して、インデックスに適用する。

% git cherry-pick -n -m1 56d84e2e6a648f4

以上で誤って削除したスタックを復旧できました。
ありがとうございました。