DEV Community

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

How to stash a specific file or multiple files?

Yashu Mittal on November 01, 2018

How to stash a specific file or multiple files?

Collapse
 
gianpaj profile image
Gianfranco • 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

...
Enter fullscreen mode Exit fullscreen mode
git stash push src/services/styles.ts --keep-index
Saved working directory and index state WIP on _branch_name_: 32dbc82 ....
Enter fullscreen mode Exit fullscreen mode
$  git --version
git version 2.28.
Enter fullscreen mode Exit fullscreen mode
Collapse
 
zspencer profile image
Zee

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?

Collapse
 
mittalyashu profile image
Yashu Mittal

Yup. Cool 😎

What does -p -u flag does?

Collapse
 
zspencer profile image
Zee

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.

Collapse
 
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?

Collapse
 
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.

Collapse
 
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

Collapse
 
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.

Collapse
 
ejrojasb profile image
EmilioJRB

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

Collapse
 
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.