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.
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
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
.
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.
Thanks a lot! Hours of work were saved.
stash apply
on commit also don't work for me -fatal: 'dab54e3' is not a stash-like commit
, but cherry-pick works well