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

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

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

> * [Git – 作業を隠す](http://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E4%BD%9C%E6%A5%AD%E3%82%92%E9%9A%A0%E3%81%99)

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

## スタック削除の手順

スタックを確認。

“`prettyprinted
% 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
“`

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

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

## スタック復旧の手順

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

> * [transitive.info – git stash 使い方](http://transitive.info/article/git/command/stash/)
>
> git fsck でどこからもたどることができないコミットを探し、 その出力を編集して git log で探す。

“`prettyprinted
% 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 を指定して、インデックスに適用する。

“`prettyprinted
% git cherry-pick -n -m1 56d84e2e6a648f4
“`

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