I think filter-branch
has broken your stashes. If the argument to git stash
does not sufficiently resemble a stash bag, you get that not a stash reference
complaint.
Note that git show stashref
uses plain old git show
, which does not require that a commit given as an argument resemble a stash. If git stash show
fails the same way as the other git stash
commands, or if manual examination of the stash in question shows that it's no longer a two- or three-parent merge commit, then this is in fact the case.
It was likely the --prune-empty
that did it here. If you had not add
ed anything at the time of the stash, the index commits would be empty. In general it's probably wiser to avoid filtering stash refs.
You can try two different approaches:
- Recover the original stash SHA-1(s) from
refs/original/
(where filter-branch
left them) and/or reflogs; use those to rebuild refs/stash
and/or the stash reflogs, or use them directly and then clobber the stash ref and its reflog.
- Use just the remaining work-tree commits in the rewritten stashes. All you really need, since the index commits were empty, is that one work-tree commit. You can get a patch using the
git show
command you've already run.
(For a bit more on stash and stash bags, including the three-parent form used with --all
or --untracked
, see How to recover from “git stash save --all”?.)
Assuming you have gotten your contents back and wish to wipe out the stash
reference entirely, this will do it. Note that this is the "nuke it from orbit" option—don't do it until you're sure you're ready:
git update-ref -d refs/stash