(Note: The information from this post comes from this SO question. I’m just collecting what I found to be the best parts of it.)
(Note 2: I’m using Linux with Bash, and the commands here probably won’t work in Windows. They may work in MacOS, though.)
They say that coding is 99% boredom and 1% pure terror.
I experienced that terror today when I had meant to type git stash pop
, but accidentally typed git stash drop
.
It turns out that the solution is much easier than you might expect, though finding it was a minor challenge. Upon dropping a stash, Git does not delete the information in the stash– It looks like it just deletes the reference. If you can find the hash, you’ll be able to still restore the stash.
If you only just now dropped the stash and still have the hash listed on your screen, skip ahead to the section involving actually applying the stash (just one command). Otherwise,
Finding the hash that matches the stash.
If, like me, you already tried some commands and no longer have the hash on the screen, the first thing you’ll need to do is figure out which hash is the one from the dropped stash.
The first thing you’ll want to do is echo out a whole bunch of information from git diff. You can echo it into a file (which is what the link above does) or you can pipe it into less
, which is what I’ll do here–
git show $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' ) | less
At this point, you’ll need to know something unique (or nearly unique) about your particular stash that you can search, and you’ll need to be able to recognize the changes well enough to identity which stash you need. Something unique like this could be the name of the stash, if you remember it and it’s unique, or the date (in format Fri Jun 28 15:09:54 2019 -0400
), or maybe a function name that you wrote. Just anything that you can use to search via less
to find the stash you need.
To search with less
open, press the /
key, and remember that search is case-sensitive. In my case, I had written a function that I distinctly remember writing, radval
. (Also note that to move to the next match in a search, hit n
, to go to the previous search, hit Shift+n
. Scroll with arrow keys, but look up more details for less
if it’s a program you plan to use a lot, as I do.)
Once you find some code that you know is in the stash you need (or just found the title or something), scroll up, if needed, to the heading of the stash. This will be four lines starting with “commit”, “Merge”, “Author”, and “Date”. The long alphanumeric string following “commit” is the hash, and it’s what you’ll need.
The hard part is done.
Applying the orphan stash.
This part is easy. If you have the stash hash, and for this example I’ll use 73d46febad13327963c7e0bf95ce2829fe35042d
, simply put this in the command prompt–
git stash apply 73d46febad13327963c7e0bf95ce2829fe35042d
It should be done now, so you can breath out.