git stash internally creates a special fusion of black magic to store various parts of your changes. A merge transaction has the original base commit (what you had at the top of the branch when you hid it) as its first parent, a one-time commit representing the contents of the index at the time of recording as the second parent, and (only if you used --include-untracked ) A one-time commit containing raw files as the third parent.
Thus, the merge merge refers to files that have not been verified (like one of his parents) ... but in fact he does not include these files in his own tree (if this makes no sense, or you have a few things to find out more about Git internals ... or you know too much about merging, and this whole construction seems too awful to think;)).
In short ... to access the unprotected parts of your wallet, contact its third parent: git checkout stash@{0}^3 -- filename
Jan Krüger
source share