In one sub-directory I altered some files, added a directory with files
and added the changes (git add .)
Then I called 'git stash push && git stash pop'.
After this the newly added directory remained in the staged status, but
altered files became unstaged.
Is this an intended behavior?
Why stash push/pop unstages files? Shouldn't it preserve the directory
as-is?
Thanks,
Yuri
On Sun, Sep 5, 2021 at 10:12 AM Yuri [off-list ref] wrote:
In one sub-directory I altered some files, added a directory with files
and added the changes (git add .)
Then I called 'git stash push && git stash pop'.
After this the newly added directory remained in the staged status, but
altered files became unstaged.
Is this an intended behavior?
Yes.
Why stash push/pop unstages files? Shouldn't it preserve the directory
as-is?
It does, *provided* you invoke the pop step with `--index`.
When `git stash push` makes a stash, it saves both the index
(staging area) and working tree, as two separate commits.
Later, at the time you apply the saved stash, you choose
whether to use the saved index / staging-area (`--index`) or to
discard it (no `--index`). The apply step uses the saved working
tree in all cases, and if you also stashed untracked files with
`-u` or `-a`, it uses this third commit as well.
The `pop` command is just `apply` followed by `drop` if the
application succeeds.
Chris
On 9/5/21 10:15 AM, Chris Torek wrote:
It does,*provided* you invoke the pop step with `--index`.
When `git stash push` makes a stash, it saves both the index
(staging area) and working tree, as two separate commits.
Why 'stash push' and 'stash pop' are asymmetric in what they do by default?
Wouldn't it make more sense to make 'stash pop' precisely revert what
'stash push' does, and have an option '--no-index' instead?
Yuri
On Sun, Sep 5, 2021 at 12:02 PM Yuri [off-list ref] wrote:
Why 'stash push' and 'stash pop' are asymmetric in what they do by default?
Wouldn't it make more sense to make 'stash pop' precisely revert what
'stash push' does, and have an option '--no-index' instead?
If you ask me, yes, it would—but it would make even *more* sense
if `git stash` didn't bother saving the index at all without `--index`, and
just errored out if the index and working tree didn't match. But I didn't
write `git stash`.
My personal recommendation is: never (or hardly ever) use it. Just
make a commit.
Chris