git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Christian Vetter <christian@rasenplanscher.info>
To: Thomas Gummerer <t.gummerer@gmail.com>
Cc: "git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: [BUG] git stash --keep-index undeletes file
Date: Tue, 16 Apr 2019 19:57:25 +0000	[thread overview]
Message-ID: <1555444649793.14863@rasenplanscher.info> (raw)
In-Reply-To: <20190416184816.GU16414@hank.intra.tgummerer.com>

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.

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?


________________________________________
From: Thomas Gummerer <t.gummerer@gmail.com>
Sent: Tuesday, April 16, 2019 20:48
To: Christian Vetter
Cc: git@vger.kernel.org
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

  reply	other threads:[~2019-04-16 19:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-16 18:04 [BUG] git stash --keep-index undeletes file Christian Vetter
2019-04-16 18:48 ` Thomas Gummerer
2019-04-16 19:57   ` Christian Vetter [this message]
2019-04-16 21:59     ` Thomas Gummerer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1555444649793.14863@rasenplanscher.info \
    --to=christian@rasenplanscher.info \
    --cc=git@vger.kernel.org \
    --cc=t.gummerer@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).