It’s been a while I’m experiencing issues with
git stash. If you don’t know that command yet,
git stash is used to move all the changes living in
your staging area into a special place: the
stash.
The stash is a temporary area working like a stack.
You can push changes onto it via git stash or
git stash save; you can pop changes from top with
git stash pop. You can also apply a very specific
part of the stack with
git stash apply <stash id>. Finally you can get
the list of all the stashes with git stash list.
We often use the git stash command to stash
changes in order to make the working directory clear again so that
we can apply a patch, pull some changes, change branch, and so on.
For those purposes, the stash is pretty great.
However, I often forget about my stashes – I know I’m not the only one. Sometimes, I stash something and go to cook something or just go out, and when I’m back again, I might have forgotten about what I had stashed, especially if it was a very small change.
My current prompt for my shell, zsh, is in two parts. I set the
PS1 environnment variable to set the regular prompt,
and the RPROMPT environnment variable to set a
reversed prompt, starting from the right of the terminal. My
reversed prompt just performs a git command to check
whether we’re actually in a git project, and get the
current branch. Simple, but nice.
I came up to the realization that I could use the exact same idea to know whether I have stashed changes so that I never forget them! Here’s a screenshot to explain that:

As you can see, my prompt now shows me how many stashed changes there are around!
I share the code I wrote with you. Feel free to use it, modify it and share it as well!
# …
function gitPrompt() {
# git current branch
currentBranch=`git rev-parse --abbrev-ref HEAD 2> /dev/null`
if (($? == 0))
then
echo -n "%F{green}$currentBranch%f"
fi
# git stash
stashNb=`git stash list 2> /dev/null | wc -l`
if [ "$stashNb" != "0" ]
then
echo -n " %F{blue}($stashNb)%f"
fi
echo ''
}
PS1="%F{red}%n%F{cyan}@%F{magenta}%M %F{cyan}%~ %F{yellow}%% %f"
RPROMPT='$(gitPrompt)'
# …Have fun!