複雑なマージを行う前にいくつかのローカルの変更を隠し、マージを行った後、git stash pop
を実行する前に愚かなコミットを忘れていました。このポップにより、追跡が困難であることが判明しているいくつかの問題(大きなコードベースでの悪いメソッド呼び出し)が作成されました。 git stash show
を実行したので、少なくともどのファイルが変更されたかはわかります。他に何もなければ、これはもっとコミットするためのレッスンだと思います。
私の質問:マージを元に戻すことなくスタッシュポップを元に戻すことは可能ですか?
Gitでドロップしたスタッシュを復元する方法 を使用して、ポップしたスタッシュを見つけてみてください。 stashには常に2つのコミットがあると思います。これは、インデックスと作業コピーを保持するためです(インデックスコミットは空になることがよくあります)。次に、git show
で差分を表示し、patch -R
を使用してそれらの適用を解除します。
git stash --help
から
Recovering stashes that were cleared/dropped erroneously
If you mistakenly drop or clear stashes, they cannot be recovered through the normal safety mechanisms. However, you can try the
following incantation to get a list of stashes that are still in your repository, but not reachable any more:
git fsck --unreachable |
grep commit | cut -d\ -f3 |
xargs git log --merges --no-walk --grep=WIP
これは、同じシナリオで受け入れられた答えよりも私を助けました。
マージがそれほど複雑ではない場合、別のオプションは次のようになります。
その後、ドロップしたスタッシュからの変更のみが残ります。