[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]