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!
The code
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!