On Tue, Jun 21 2022, Tim Chase wrote: > I recently had composed a commit with some `git add -p` leaving some > portions unstaged. I wanted to stash the unstaged changes to make > sure that the staged code ran as expected, so I did a `git stash` > only to find that it unstaged my staged changes and stashed > *everything*. > > Using `git stash --saved` does the opposite of what I want (stashing > the index, not the difference between the index and the working-copy) > > So I carefully re-`git add -p`'ed everything and tried `git stash > --keep-index` which sounded promising (my index remained the same), > but popping my stash ended up causing conflicts because it had > stashed the diff of HEAD..working-copy, not INDEX..working-copy. A > `git stash show -p` confirmed that the stash included things that I > had already staged. > > So I carefully re-`git add -p`ed everything yet again, but then got > stuck trying to convince `stash` to save a snapshot of only the diff > in my working directory. To work around it, I did a `git diff > > temp.patch` to obtain the stuff I'd wanted to stash, a `git reset > --staged` to clear out those changes, ran my code to verify > (eventually committing it), and then applied the `temp.patch` back on > top of my changes. It worked, but felt convoluted. > > I did see the `git stash -p` option, to manually choose the inverse > bits, but for what I was doing, it was more sensible to `git add -p` > and try to stash the rest. > > So is there some option I've missed to tell `git stash` to stash only > the delta between the uncommitted-index and the working-copy? Is what you want equivalent to: # save the "git add -p"'d chunks git stash push --staged # save the "uncommitted" git stash push # pop the previously staged git stash pop --index stash@{1} ? I.e. this (ab)uses the stash itself to juggle the two around. I don't think there's a way to do this in one step, but I'm not very familiar with git-stash. If that is what you want (and we don't have a way to do it) perhaps we should have a a: git stash push --unstaged Which could start out as an alias for the above sequence, with e.g. an optional "--include-untracked" being passed to the second "git stash push" command above. I also found this past thread (CC'd the author, in case it helps), which seems to be asking the same question: https://lore.kernel.org/git/CAC4jX8GEg5=9BPepYLntGRG7n_84ju7rTSYO82SQyuiiff0UcQ@xxxxxxxxxxxxxx/