Re: [BUG] git stash --keep-index undeletes file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[please don't top post on this list]

On 04/16, Christian Vetter wrote:
> Thank you, Thomas!
> 
> Now that you explained this, I do understand the behaviour, and agree that it is correct.
> While this seems to be clear with a deeper understanding of git than I have,
> it might be a good idea to specifically point this out in the docs in the context of `--keep-index`.
> That would have helped me.

On second thought, I might have been too quick to jump to conclusions
here, and might have misunderstood --keep-index myself.  I think what
you described here is actually a bug, although it's a pretty long
standing one.  So I'm a bit surprised nobody noticed it before.

Thanks for reporting it.

> This does, however, bring me back to a related issue by which I stumbled across this:
> If, in the given scenario, I run `git stash apply`, the file is not removed. `git status` still outputs this:
> > On branch master
> > Changes to be committed:
> >   (use "git reset HEAD <file>..." to unstage)
> >
> >         deleted:    file
> >
> > Untracked files:
> >   (use "git add <file>..." to include in what will be committed)
> >
> >         file
> 
> Can you explain that behaviour as well?
> The way I understand it, `git stash push --keep-index; git stash apply` should result in zero change to the output of `git status`.
> What am I not getting?

Your interpretation of what should happen sounds like the right
behaviour here, and what actually happens seems incorrect.  I don't
have time to dig into this more right now though unfortunately.

> ________________________________________
> From: Thomas Gummerer <t.gummerer@xxxxxxxxx>
> Sent: Tuesday, April 16, 2019 20:48
> To: Christian Vetter
> Cc: git@xxxxxxxxxxxxxxx
> Subject: Re: [BUG] git stash --keep-index undeletes file
> 
> On 04/16, Christian Vetter wrote:
> > Steps to reproduce
> > + mkdir git-stash-test
> > + cd git-stash-test
> > + git init
> > + touch file
> > + git add file
> > + git commit -m init
> > + git rm file
> > + git stash push --keep-index
> >
> >
> > Result:
> > `git status` gives this output:
> > > On branch master
> > > Changes to be committed:
> > >   (use "git reset HEAD <file>..." to unstage)
> > >
> > >         deleted:    file
> > >
> > > Untracked files:
> > >   (use "git add <file>..." to include in what will be committed)
> > >
> > >         file
> 
> I think this is the correct result.  --keep-index keeps the changes
> that are in the index, in this example that 'file' is deleted, but
> restores the working tree to 'HEAD', where 'file' existed.  It's now
> showing up as untracked because Git doesn't know about it.
> 
> Similarly if you just did 'git stash push' without --keep-index,
> 'file' would be restored in your working tree, but 'git status' would
> report the working tree as clean because it would also be restored in
> the index.
> 
> > Expected:
> > `git status` gives this output:
> > > On branch master
> > > Changes to be committed:
> > >   (use "git reset HEAD <file>..." to unstage)
> > >
> > >         deleted:    file
> 
> This is what you get before 'git stash push --keep-index'.  Do you
> think the documentation on '--keep-index' is unclear, and could be
> improved?  Or why did you think that this is the correct output?
> 
> > Verified on:
> > + Windows 10, git version 2.21.0.windows.1
> > + Ubuntu 14.04, git version 2.21.0



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux