[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
以上で誤って削除したスタックを復旧できました。
ありがとうございました。