stashing only unstaged changes?
- From
- Tim Chase <git@tim.thechases.com>
- Date
- Jun 21, 2022, 19:26 UTC
- Message-ID
- <20220621142618.239b02cd@bigbox.attlocal.net>
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?
Thanks,
-Tim
(I'd posted this on /r/git
https://www.reddit.com/r/git/comments/vchu83/stashing_only_unstaged_changes/
but figured I'd try my hand here in the hope of more answers)