The index/stage/cache are the same thing - as for why some many terms, I think that index was the 'original' term, but people found it confusing, so the other terms were introduced. And I agree that it makes things a bit confusing sometimes at first.
The stash
facility of git is a way to store 'in-progress' work that you don't want to commit right now in a commit object that gets stored in a particular stash directory/database). The basic stash
command will store uncommitted changes made to the working directory (both cached/staged and uncached/unstaged changes) and will then revert the working directory to HEAD.
It's not really related to the index/stage/cache except that it'll store away uncommitted changes that are in the cache.
This lets you quickly save the state of a dirty working directory and index so you can perform different work in a clean environment. Later you can get back the information in the stash object and apply it to your working directory (even if the working directory itself is in a different state).
The official git stash
manpage has pretty good detail, while remaining understandable. It also has good examples of scenarios of how stash
might be used.