git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH/RFC 3/3] stash: pass the pathspec argument to git reset

From
Jeff King <peff@peff.net>
Date
Mar 20, 2017, 19:08 UTC
Message-ID
<20170320190843.aw3fsenjvcek7a44@sigill.intra.peff.net>
In-Reply-To
<20170319202351.8825-4-t.gummerer@gmail.com>
On Sun, Mar 19, 2017 at 08:23:51PM +0000, Thomas Gummerer wrote:
> For "git stash -p --no-keep-index", the pathspec argument is currently
> not passed to "git reset".  This means that changed that are staged but
> that are excluded from the pathspec still get unstaged by git stash -p.

Yeah, I noticed this while playing around with patch 2. This seems like an improvement to me. Unlike the other patches (which are just tweaking quietness), I think this one really needs a test.

Also, s/changed/changes/ above.
Show 12 quoted lines
> ---
> So this make things a bit inconsistent in for example the following
> situation:
> 
>     $ git status -s
>      M git-stash.sh
>     M  read-cache.c
> 
> where using git stash -p --no-keep-index, when only changes in
> git-stash.sh are added to the stash would reset read-cache.c, but with
> git stash -p --no-keep-index -- git-stash.sh, read-cache.c would not
> be reset.

I think it's OK. You can't select (or not select) changes from the index anyway. TBH, I kind of wonder if "git stash -p --no-keep-index" makes any sense at all.

> However it does bring things more in line with git stash --
> <pathspec>, so I think this is an improvement.

I did notice one other case while looking at this that I think is much more serious. The "read-tree" call in the non-patch-mode case doesn't use a pathspec either. So if we have our same setup where "one" and "two" have unstaged changes and we do:

  git stash push -k one
Then we stash "one", but the change in "two" is wiped out completely!

I don't think read-tree takes pathspecs, so it would have to drop the "-u" and replace it with checkout-index. I'm confused about why we would need it in the first place, though. We should have already dealt with the working tree files in the earlier block, so there should be nothing to checkout.

The "-u" goes all the way back to 7bedebcaa (stash: introduce 'stash save --keep-index' option, 2008-06-27). I wonder if it has always been unnecessary, but we never noticed because it's just a noop.

-Peff
Previous: Thomas GummererNext: Thomas Gummerer
Message 11 of 26 in “[BUG] "git stash -- path" reports wrong unstaged changes”
  1. Jeff KingMar 17, 2017
  2. Thomas GummererMar 18, 2017
  3. Thomas GummererMar 19, 2017
  4. 1/3 stash: show less information for stash push -- <pathspec>Thomas Gummerer, Mar 19, 2017
  5. Junio C HamanoMar 20, 2017
  6. Jeff KingMar 20, 2017
  7. Junio C HamanoMar 20, 2017
  8. Thomas GummererMar 21, 2017
  9. Jeff KingMar 20, 2017
  10. 3/3 stash: pass the pathspec argument to git resetThomas Gummerer, Mar 19, 2017
  11. Jeff KingMar 20, 2017
  12. Thomas GummererMar 21, 2017
  13. Jeff KingMar 21, 2017
  14. 2/3 stash: make push -p -q --no-keep-index quietThomas Gummerer, Mar 19, 2017
  15. Jeff KingMar 20, 2017
  16. 0/3 Re: [BUG] "git stash -- path" reports wrong unstaged changesThomas Gummerer, Mar 21, 2017
  17. 2/3 stash: pass the pathspec argument to git resetThomas Gummerer, Mar 21, 2017
  18. Jeff KingMar 21, 2017
  19. 1/3 stash: don't show internal implementation detailsThomas Gummerer, Mar 21, 2017
  20. Jeff KingMar 21, 2017
  21. Thomas GummererMar 22, 2017
  22. Jeff KingMar 22, 2017
  23. 3/3 stash: keep untracked files intact in stash -kThomas Gummerer, Mar 21, 2017
  24. Jeff KingMar 21, 2017
  25. Thomas GummererMar 22, 2017
  26. Jeff KingMar 20, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.