Stash, inspect, then pop onto whichever worktree you want

Git Navigator turns git stash into three explicit actions on the same overlay: create a stash from the uncommitted-changes panel, expand any stash inline to see its files and diffs before deciding, then pop onto the active worktree — which you choose with the active-worktree radio. Stashes are repo-global; the pop target follows your selection.

Git Navigator showing the uncommitted-changes panel with the inline Stash button enabled
Stash works from the uncommitted-changes panel: stage some files, hit Stash, and the changes move from the panel into the stash list.

Stash, the way it actually works

Stash from the panel you already have open

The uncommitted-changes panel grows a Stash button as soon as you stage something. No separate dialog — the button stashes the included files and clears the panel in one click.

Inspect before you pop

The Stash + History overlay shows every stash with its message and age. Click a row to expand it; click a file inside to see the diff. So you don't have to git stash show -p from memory.

Pop onto any worktree

Stashes are repo-global, so they belong to the repository, not to whichever worktree made them. Pop runs against the active worktree — which you set with the radio on the worktree row. Switch the active worktree, open the overlay, pop: the stash lands wherever you steered it.

Drop without re-opening a shell

Each stash row carries a Drop button next to Pop. No more git stash drop stash@{N} arithmetic when N is a half-remembered number.

Walkthrough

  1. Step 1 — The uncommitted-changes panel for the active worktree already shows the staged files. Whenever there's something staged,
    Step 1. The uncommitted-changes panel for the active worktree already shows the staged files. Whenever there's something staged, the inline Stash button at the right of the panel lights up — it stashes the staged set and clears the panel in one step.
  2. Step 2 — The button is gated on a non-empty included set, so you don't accidentally stash nothing. Title-text reflects the gate:
    Step 2. The button is gated on a non-empty included set, so you don't accidentally stash nothing. Title-text reflects the gate: "Stash included changes" when enabled, "No changes included to stash" when not.
  3. Step 3 — Click and Git Navigator runs git stash push -m "Stashed from included changes" -- <files> for the included paths.
    Step 3. Click and Git Navigator runs git stash push -m "Stashed from included changes" -- <files> for the included paths. The panel clears (no more staged changes), and the new stash drops in at stash@{0} ready to be inspected from the Stash + History overlay.

The stash lifecycle

  1. Stage what you want to set aside. Stash works on the staged set, so stage the files you want to put on the shelf. The Stash button on the uncommitted-changes panel lights up the moment there's anything staged.
  2. Open the overlay to inspect. More → Stash + History lists every stash. Expand a row to see its files; expand a file to see its diff. Decide whether to pop, drop, or leave it.
  3. Pick the worktree to pop onto. Pop targets the active worktree. If you want the stash to land somewhere else, switch the active-worktree radio first — the overlay's next pop follows the new selection.
  4. Pop (or drop). Pop applies the stash and removes it from the list. Drop removes it without applying. No more stash@{N} arithmetic.

Frequently asked questions

Why is Stash on the uncommitted-changes panel and not in the overlay?

Because the panel is what you already have open when you decide "actually, save this for later." Putting Stash there means you don't have to switch context — stage, hit Stash, the changes move to the stash list, and the panel clears.

Can I pop a stash onto a different worktree from the one it was made on?

Yes — and that's the most useful angle. Stashes are repo-global (Git stores them under refs/stash, not per worktree), and Git Navigator's Pop button targets the active worktree. Switch the active-worktree radio first, then open the overlay and pop — the stash lands wherever you steered it.

What does the inline expand actually show?

Clicking the chevron expands the stash row to list the files it touches. Clicking a file in that list expands further to show the diff for that file — same hunk display the rest of the app uses. The expand is purely additive: the overlay stays open, the Pop and Drop buttons stay one click away.

What's the difference between Pop and Drop?

Pop applies the stash to the working tree and removes it from the stash list. Drop removes it without applying. There's no Apply (keep the stash) in the overlay yet — pop, or drop, or close the overlay and decide later.

Does Stash respect conflicts in the active worktree?

Yes. Pop and Drop are gated on the active worktree being clean of in-flight merge / rebase / cherry-pick state. The overlay disables both actions if the worktree is in conflict, so you can't pop on top of a paused merge by accident.