I needed to do this as well.
My main use of git stash
I keep a set of stashes that I like to apply (not pop) fairly often. For instance, I have a stash that applies a certain configuration which is different than what is checked into the repo. After getting latest, I will just run something like git stash apply 0
after checking the stash list.
The problem I just now ran into
When applying a stash, you might run into merge conflicts. When this occurs, you are forced to fix the merge conflicts. This is something you obviously don't want to do every time you apply the stash.
Resolution
This obviously won't keep the index the same, unless the item you are applying is at the top of the stack, but it works for me. I only care that I have the item in the stash, not where it is in relation to other stashed items.
# Find the item in the stash I'm trying to apply, based on the description.
git stash list
# Apply the stashed item, based on its index.
git stash apply 0
# Merge conflicts found... correct them.
git mergetool
# Drop the stash by whatever index was found.
# This is necessary since doing a git stash pop doesn't remove a stash that has merge-conflicts.
# In that scenario, it says "The stash entry is kept in case you need it again."
git stash drop 0
# Resave the stash with the merge-conflicts taken care of.
git stash save "Some message for identifying the stash in the list"