On 11/07, Grzegorz Rajchman wrote: > Hi, this is the first time I report an issue in git so I hope I'm > doing it right. Thanks for the report. You are indeed doing this right, and the included reproduction is very helpful. I broke this in 34933d0eff ("stash: make sure to write refreshed cache", 2019-09-11), which wasn't caught by the tests, nor by me as I don't use the --quiet flag normally. Below is a fix for this, but I want to understand the problem a bit better and write some tests before sending a patch. index ab30d1e920..2dd9c9bbcd 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -473,22 +473,20 @@ static int do_apply_stash(const char *prefix, struct stash_info *info, if (reset_tree(&c_tree, 0, 1)) { strbuf_release(&out); return -1; } ret = update_index(&out); strbuf_release(&out); if (ret) return -1; - - discard_cache(); } if (quiet) { if (refresh_and_write_cache(REFRESH_QUIET, 0, 0)) warning("could not refresh index"); } else { struct child_process cp = CHILD_PROCESS_INIT; /* * Status is quite simple and could be replaced with calls to > I have experienced some unexpected behaviour with git stash pop > --quiet in git 2.24.0. I use stash in a pre-commit hook script. In it, > I stash non-staged changes to keep the working directory clean while > running some linters, then I restore the stash by running pop, but > after the recent git update I noticed that it stages all previously > checked files as deleted. > > Steps to reproduce: > > mkdir test-git-stash > cd test-git-stash/ > git init > echo foo > foo.txt > git add . && git commit -m 'init' > echo bar > foo.txt > git stash save --quiet --include-untracked --keep-index > git stash pop --quiet > git status > > This will unexpectedly output: > > On branch master > Changes to be committed: > (use "git restore --staged <file>..." to unstage) > deleted: foo.txt > > Untracked files: > (use "git add <file>..." to include in what will be committed) > foo.txt > > Notice that foo.txt was staged as deleted whilst still being present > on the disk. > > However, if I remove --quiet flag from stash pop: > > git restore --staged foo.txt > git stash save --quiet --include-untracked --keep-index > git stash pop > git status > > Then it works as expected. It used to work as expected in git prior to 2.24.0 > > My OS is Ubuntu 19.04.