想定シーン
- あっ!意図しないブランチで
git stash pop
してしまってConflictしてわけわかんなくなった!別のブランチにこのstash内容を反映したいのに! - あっ!日々の激務で疲れていて、わけのわからないところで
git stash clear
してしまった!死にたい! - もうなんかよくわかんなくなってきたから、一回全部白紙に戻してstashを反映したところから人生をやり直したい
stash を呼び戻す手順
1.まずstashを反映したかったブランチに切り替えます
2.stashの履歴を探します
下記のコマンドで、git logから探します。
git fsck --unreachable | grep commit | cut -d\ -f3 | xargs git log --merges
--no-walk --grep=WIP
結果はこんな感じで出ます。
commit 6e54e2d5920f7464774e09b8f6d782c716494a2a
Merge: 5b70c38c 5829f39b
Author: hoge hogeo <hogeo@MacBook-Pro.local>
Date: Wed Jun 14 21:02:11 2017 +0900
WIP on feature/hogehoge: 5b70c38c Merge branch 'develop' into feature/hogehoge
commit baa17b7debbe43b254b5dee686e931c6a072f524
Merge: 5b70c38c b971c527
Author: hoge hogeo <hogeo@MacBook-Pro.local>
Date: Wed Jun 14 20:48:13 2017 +0900
WIP on feature/hogehoge2: 5b70c38c bug-fix hogehoge
3.目当てのcommit履歴を見つけたら、cherry-pickします
例えば、
commit baa17b7debbe43b254b5dee686e931c6a072f524
Merge: 5b70c38c b971c527
Author: hoge hogeo <hogeo@MacBook-Pro.local>
Date: Wed Jun 14 20:48:13 2017 +0900
WIP on feature/hogehoge2: 5b70c38c bug-fix hogehoge
のstash履歴を、現在のブランチに反映したいっ!という場合は、
git cherry-pick -n -m1 baa17b7debbe43b254b5dee686e931c6a072f524 <= 復元したいやつのSHA-1です
を実行します。
すると、現在のブランチに内容が反映(cherry-pick)されます。
やったね