How to undo git stash clear

Git

Git Problem Overview


I executed git stash save "ABC".
Then by mistake I did git stash clear . How can I retrieve the data that was in stash ABC?

Git Solutions


Solution 1 - Git

As it may be found in the documentation of git stash, you may be lucky if this works:

> 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

If you find the stash you cleared by mistake, then you can do:

git stash apply <stash>

EDIT: Use this command instead git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk --grep=WIP

Solution 2 - Git

All of the above answers end with a git stash apply [commit] which is good, but is not an exact undo of git stash clear. For that you need to re-stash the orphaned stash-commit. I found these instructions which almost worked but needed a flag to get all the way there. Summarizing:

  1. Find the orphaned stash commits: git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk
  2. Re-stash the commit: git update-ref --create-reflog refs/stash 4b3fc45c94caadcc87d783064624585c194f4be8 -m "My recover stash"

Solution 3 - Git

Run this command to find the commit:

git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk --grep=WIP

will list something like:

Checking object directories: 100% (256/256), done.
commit c36e565014d9a927c36f16e78bc327eb375d33b8
Merge: dff6bc1 4e05a0c
Author: suhailvs <[email protected]>
Date:   Thu Jul 19 13:32:01 2018 +0530

WIP on master: dff6bc1 added menu

then checkout that commit c36e565014:

git checkout c36e565014

Solution 4 - Git

I had to use

git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk

to fetch all the orphan stash which will give an o/p similar to this:

Checking object directories: 100% (256/256), done.
Checking objects: 100% (395/395), done.
commit 3928306034b292770cc4cd2987c034ffad250e0b    //commit stash hash
Merge: 16056a0 ac3c354
Author: Jimmy <mail>
Date:   Thu Nov 14 17:31:05 2019 +0530

    On profile: stashing for

commit 50f6f3a7161dd44bfcef2b8328a2329db4c7ec34

and use

git apply stash 3928306034b292770cc4cd2987c034ffad250e0b

And I got my stashed changes back. Thanks to https://mobilejazz.com/blog/how-to-recover-a-deleted-git-stash/

Solution 5 - Git

I also deleted a stash, but using the GitKraken gui, so I don't know exactly what git commands it executed. The chosen answer didn't work for me but put me on the right path at least.

In my case, manually searching through --unreachable objects worked. I'm sure there is a more efficient way, but I'm just glad I was able to recover the changes.

ids=`git fsck --unreachable | grep blob | cut -d ' ' -f3`
number_of_ids=`echo $ids | wc -l | tr -d '[:space:]'`
for i in {1..$number_of_ids}; do git show `echo $ids | sed -n ${i}p` > evaluate$i.rb;done; 

So this saves all the unreachable objects to files prefixed by "evaluate". I then opened all the files in a text editor (sublime for me subl evaluate*), and evaluated each file in turn, manually copying and pasting the file into the old version of the original file if it was a file from the stash I deleted.

Tips:

  • Change the .rb to match the file extension of the files you are looking for, to get appropriate syntax highlighting if you want it.
  • If your files aren't included, you can widen the scope of your search by removing the | grep blob (the blobs were where I found my files).

Solution 6 - Git

Right click on your project in project structure on the left. then select Local History --> Show History check the screen shot.it shows the list of Local Changes left side you can see the corresponding changes at right side.

To apply changes right click on the selected item it gives two options 1)Revert 2)Create Pacth

enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAshish BankerView Question on Stackoverflow
Solution 1 - GitmamusoView Answer on Stackoverflow
Solution 2 - GitstudogView Answer on Stackoverflow
Solution 3 - GitsuhailvsView Answer on Stackoverflow
Solution 4 - Githushed_voiceView Answer on Stackoverflow
Solution 5 - GitNathan HannaView Answer on Stackoverflow
Solution 6 - GitRamesh BhupathiView Answer on Stackoverflow