Saving a stash
Putting work aside without committing it: all of it, the tracked part, or only the files you pick.
A stash is somewhere to put uncommitted work when you need a clean tree and are not ready to commit. How much of your work goes into it is your choice.
The three of them
| Saves | Leaves in the working copy | |
|---|---|---|
| Stash Tracked Changes… | staged and unstaged changes to tracked files | untracked files |
| Stash All Changes… | those, and untracked files with them | nothing |
| Stash Selected Files… | only the files you have selected | every other change |
Files Git ignores are never stashed, whichever you choose.
Stash in the toolbar and Repository ▸ Stash Tracked Changes… are
both the first one. All three sit together in the Command Palette
(⌘K); none of the three has a key equivalent
of its own.

Only the files you picked
Stash Selected Files… takes the selection in the working copy’s file list. Right-clicking that list is the other way in, and it takes the rows you right-clicked rather than the selection. The entry counts what it has: Stash 3 Files… on files, or Stash All Changes in “Sources”… on a folder, which means every changed file underneath it.
The list is fixed when the sheet opens. Change the selection behind it and the stash is still the files the sheet is showing you. Every other change is left exactly as it was, staged or not.
The confirmation
All three open the same sheet.

The title names the scope, the list is exactly what is about to leave your working copy, and Open Diff… reads that as a diff in the Diff Review window. The line under the list counts what stays behind.
Worth a glance: a stash that quietly took a change you meant to keep is discovered much later than one you looked at.
The message is optional; give it one anyway. Stashes accumulate, and
stash@{3} tells you nothing whereas “half-done retry logic” tells you
everything.
When you cannot
Stashing is unavailable when there is nothing to save, before the repository’s first commit, while a conflict is unresolved, and while another operation is running. The palette keeps all three rows listed rather than hiding them, greyed out, and VoiceOver reads the reason.
When to reach for one
- You need to switch branches and Git will not let you.
- Something urgent arrived and the current change is not finished.
- You want to see what the file looks like without your change, briefly.
The first of those Innesta will also do for you — switching branches with uncommitted work offers to auto-stash, and to put that stash back when you return to the branch. What it will not do is name it, and it leaves untracked files where they are.
Stash or discard?
Discarding means “this was a mistake”; stashing means “not now”. Both get the change out of your way; only one of them is meant to come back.
If you are not sure, stash. It costs nothing and the decision can be made later, whereas a discard is a decision made now — recoverable through Recovery until its backup expires, but a decision.