Skip to content

Instantly share code, notes, and snippets.

@joseluisq
Last active March 28, 2024 11:59
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.

@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.

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