Skip to content

Instantly share code, notes, and snippets.

@joseluisq
Last active March 18, 2025 14:49
Show Gist options
  • Save joseluisq/7f0f1402f05c45bac10814a9e38f81bf to your computer and use it in GitHub Desktop.
Save joseluisq/7f0f1402f05c45bac10814a9e38f81bf to your computer and use it in GitHub Desktop.
How to recover a dropped stash in Git?

How to recover a dropped stash in Git?

1. Find the stash commits

git log --graph --oneline --decorate ( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )

This will show you all the commits at the tips of your commit graph which are no longer referenced from any branch or tag โ€“ every lost commit, including every stash commit youโ€™ve ever created, will be somewhere in that graph.

bash/sh shell users: Version above is for Fish shell, so if you are Bash/SH user just add a $ sign before to the left parenthesis.

2. Once you know the hash of the commit you want, you can apply it as a stash

git stash apply YOUR_WIP_COMMIT_HASH_HERE

Note: The commit message will only be in this form (starting with "WIP on") if you did not supply a message when you did git stash.

Source: View the complete answer at https://stackoverflow.com/a/91795/2510591

3. If your stash commit is not listed or you don't find it (optional)

If your stash was already applied but you don't see it, for example after resolving a conflict or reset. Follow these steps:

  • Run git fsck --no-reflog | awk '/dangling commit/ {print $3}'
  • Pick a stash commit hash and use git show COMMIT_HASH in order to examine the stash commit diff of your changes.
  • After found your changes just use the corresponding commit of your stash changes and then just apply it using git stash apply COMMIT_HASH.

Bonus

If you are Fish shell user, you can take a look at GitNow which is a tool to perform faster Git operations and that can also stash your changes for you.

@Vipin1437
Copy link

Thanks a lot for this, It saved my three days work !!!

@mjstanton
Copy link

OMG dude - you saved my sanity and work! Thank you, thank you.

@kastetkot
Copy link

Thanks a lot!

@Kripteks
Copy link

Thank you, you are better than ChatGPT

@wulinjie122
Copy link

wulinjie122 commented Apr 7, 2023

I usually user below command to recover my lost stash:

# get the lost stash and output to find.txt
git fsck --unreachable | awk '{print $3}' | xargs git show >> find.txt

# this command is powerful, you can find your change if you remember the changed content or file name
git log --graph --decorate --pretty=oneline --abbrev-commit --all $(git fsck --no-reflogs | grep commit | cut -d' ' -f3)

# once you get the correct hash, you can get the dropped stash via hash
git stash apply 95ccbd927ad4cd413ee2a28014c81454f4ede82c

@Tolu-Mals
Copy link

Thank you!

@denkhis
Copy link

denkhis commented Jul 4, 2023

Thank you for saving my time ๐Ÿ™

@jcollum-nutrien
Copy link

git log --graph --oneline --decorate ( git fsck --no-reflog | awk '/dangling commit/ {print $3}' ) will give a zsh: bad pattern error in zshell. I don't recally why that happens. I solved the issue that I had a different way.

@Bizarrus
Copy link

Its work not with lost stashes from 2019 :-(

@PherbCampton
Copy link

I usually user below command to recover my lost stash:

# get the lost stash and output to find.txt
git fsck --unreachable | awk '{print $3}' | xargs git show >> find.txt

# this command is powerful, you can find your change if you remember the changed content or file name
git log --graph --decorate --pretty=oneline --abbrev-commit --all $(git fsck --no-reflogs | grep commit | cut -d' ' -f3)

# once you get the correct hash, you can get the dropped stash via hash
git stash apply 95ccbd927ad4cd413ee2a28014c81454f4ede82c

Thank you, you just saved a life

@mdesai-ontic
Copy link

You saved me

@FranciscoCaldeira
Copy link

FranciscoCaldeira commented Jan 5, 2024

I usually user below command to recover my lost stash:

# get the lost stash and output to find.txt
git fsck --unreachable | awk '{print $3}' | xargs git show >> find.txt

# this command is powerful, you can find your change if you remember the changed content or file name
git log --graph --decorate --pretty=oneline --abbrev-commit --all $(git fsck --no-reflogs | grep commit | cut -d' ' -f3)

# once you get the correct hash, you can get the dropped stash via hash
git stash apply 95ccbd927ad4cd413ee2a28014c81454f4ede82c

If you have this:

error: object hash is a tree, not a commit
fatal: 'hash' is not a stash-like commit

Only use the commit hash not the tree hash.

@coreybyrum7
Copy link

Thanks for this. S/O to the Git gods ๐Ÿ

@Tehpson
Copy link

Tehpson commented Mar 18, 2025

Thank you. saved my day

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment