Search code examples
gitgit-stash

How to stash only staged changes in Git?


Is there a way I can stash just my staged changes? The scenario I'm having issues with is when I've worked on several bugs at a given time, and have several unstaged changes. I'd like to be able to stage these files individually, create my .patch files, and stash them away until the code is approved. This way, when it's approved I can stash my entire (current) session, pop that bug and push the code.

Am I going about this the wrong way? Am I misunderstanding how git can work in other ways to simplify my process?


Solution

  • Yes, It's possible with DOUBLE STASH

    1. Stage all your files that you need to stash.
    2. Run git stash --keep-index. This command will create a stash with ALL of your changes (staged and unstaged), but will leave the staged changes in your working directory (still in state staged).
    3. Run git stash push -m "good stash" (add the -u flag to include new files in the stash)
    4. Now your "good stash" has ONLY staged files.

    Now if you need unstaged files before stash, simply apply first stash (the one created with --keep-index) and now you can remove files you stashed to "good stash".

    Enjoy