To see the difference between the current code and some stash's entry, you can run the following:
git stash show -p
You can specify a stash index too:
// git stash list
stash@{0}: First entry
stash@{1}: Second entry
stash@{2}: Third entry
stash@{3}: Fourth entry
stash@{4}: Fifth entry
git stash show -p 1 // Shows diff for stash@{1} // Second entry
You can run this command to save code into the stash with a specific message so
it's easier to differentiate multiple stash entries later (and even apply a
specific one by using git stash apply):
git stash push -m "Custom Message"
Note: git stash save "Custom Message" is deprecated, so I'd suggest to stick with git stash push.
Let's suppose that you have the following entries in the stash:
// git stash list
stash@{0}: First entry
stash@{1}: Second entry
stash@{2}: Third entry
stash@{3}: Fourth entry
stash@{4}: Fifth entry
You can run git stash apply with the index of the stash list as a parameter (starting with 0) to apply the entry "Third entry" from the stash:
git stash apply 2
This means that git stash pop is equivalent to git stash apply 0.
If you may want to apply some changes but keep them in the stash, you can run the following:
git stash apply
According to git docs:
Like pop, but do not remove the state from the stash list
There's an issue that prevents to add a global configuration to disable pagination for git stash list, so you can only do this on a per command basis:
git --no-pager stash list
This maybe be a bit cumbersome to repeat, so you can always create an alias for git stash list as I did:
alias gstl='git --no-pager stash list'Now you can run gstl to list your stash entries.
If you want to stash a specific file(s), you can append them on the git stash -m message syntax:
git stash push -m "Custom Message" index.js package.json yarn.lock