The problem
git stash list only shows a cryptic index and branch name — you have to run a separate git stash show -p stash@{N} just to see what is inside, and applying or dropping any stash means typing out the full reference by hand every time.
If you have hit this before, you know the friction: you accumulate stashes, forget what is in them, and end up either applying the wrong one or never cleaning them up.
As a solution, I created stash-pick
Browse, apply, pop, and drop git stashes interactively with arrow-key navigation and inline diff preview.
Zero-dependency Node.js — run it instantly:
npx stash-pick
Output:
stash-pick ↑/↓ navigate Enter apply p pop d drop q quit
─────────────────────────────────────────────────────────────────
▶ stash@{0} WIP on feature/auth: user token refresh logic
stash@{1} WIP on main: quick experiment with rate limiting
stash@{2} On fix/typo: README wording update
Stat:
src/auth/tokens.js | 14 +++++++++-----
src/middleware.js | 6 +++---
2 files changed, 11 insertions(+), 8 deletions(-)
@@ -34,7 +34,10 @@ async function refreshToken(user) {
- const token = await fetchToken(user.id);
+ const token = await fetchToken(user.id, { force: true });
How it works
Pure Node.js: process.stdin raw mode + ANSI escape codes for the full-screen TUI. child_process.execSync shells out to git for all stash operations. Zero runtime dependencies.
Why I built it
Found repeated complaints on r/git and r/commandline about the friction of inspecting stashes before applying. Every developer has had the experience of stash@{3}: WIP on main: something telling them nothing useful. Existing solutions like lazygit are full-blown TUI clients — there is no focused, zero-dep Node tool that does just this one thing.
Try it
npx stash-pick --help
Part of µ micro — one new developer tool, shipped every day. All tools are zero-dependency Node.js.
Top comments (0)