DEV Community

Cover image for How to stash a specific file or multiple files?

git stash specific files How to stash a specific file or multiple files?

mittalyashu profile image Yashu Mittal ・1 min read

How to stash a specific file or multiple files?

Discussion (11)

Editor guide
zspencer profile image

As Ben pointed out, you may use git stash path/to/file path/to/other/file to stash specific files. Another handy tip is that git provides very detailed man pages for each sub-command! However, these pages are somewhat tricky to find if you don't know the secret: Use man git-<name-of-subcommand>!

So if you are struggling with making stash do what you want, you can run man git-stash in your terminal and bam all kinds of detailed information that makes my head spin.

My favorite of the git-stash flags is -p -u. Running git stash save -p -u will step-by-step walk you through each and every changed/new file in your repo and ask "Do you want to stash this?"

Cool, huh?

mittalyashu profile image
Yashu Mittal Author

Yup. Cool 😎

What does -p -u flag does?

zspencer profile image

the -p flag allows you to decide, change by change, what you want to stash. The -u flag says "Also, stash untracked files"

They do appear to be incompatible sometimes though.

deciduously profile image
Ben Lovy

git stash - e.g. git stash . or git stash src/index.js. Then git stash apply to apply the stashed changes or git stash drop to discard them.

Is that what you're looking for?

ryzngard profile image
Andrew Hall

git stash pop is like apply + drop as well. I think git stash --keep-index keeps everything staged, and stashes unstaged changes. Useful if it's hard to type the pathspec for multiple files, or if you want to stash some changes to a file but not all.

andy profile image
Andy Zhao (he/him)

Big fan of git stash pop. Definitely a 1 command > 2 commands scenario.

Thread Thread
deciduously profile image
Ben Lovy

Whoa, TIL. Git's pretty cool, isn't it

gianpaj profile image
Gianfranco.JS • Edited

This didn't work:
git stash _file_
This did:
git stash push _file_ --keep-index

$ git stash src/services/styles.ts
fatal: unknown subcommand: src/services/styles.ts

git stash push src/services/styles.ts --keep-index
Saved working directory and index state WIP on _branch_name_: 32dbc82 ....
$  git --version
git version 2.28.
chhajedji profile image
chinmay chhajed

git stash --keep-index it is.

Add the changes to the staging area which you do not want to stash. All changes to be stashed should be not staged but modified or untracked. Then you can just git stash --keep-index to stash changes. As mentioned in some other answer, add -u to add untracked files also. Then you can just git restore --staged <file names> to bring staged changes back to modified.

ejrojasb profile image

I suggest git stash save "a comment here". I always use it, it is the best way or working with stashes, the indexes may get you lost

iamsteveworsley profile image
Steve Worsley

Just to help people coming from google the save command has been deprecated:

This option is deprecated in favour of git stash push. It differs from "stash push" in that it cannot take pathspecs, and any non-option arguments form the message.