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

Re: [RFC] stash --continue

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jan 19, 2017, 21:30 UTC
Message-ID
<alpine.DEB.2.20.1701192220320.3469@virtualbox>
In-Reply-To
<aa8104ad-45f4-7bef-f199-6e6021cf0c06@xiplink.com>
Hi Marc,
On Thu, 19 Jan 2017, Marc Branchaud wrote:
Show 65 quoted lines
> On 2017-01-19 10:49 AM, Johannes Schindelin wrote:
> >
> > On Wed, 18 Jan 2017, Marc Branchaud wrote:
> >
> > > On 2017-01-18 11:34 AM, Johannes Schindelin wrote:
> > > >
> > > > On Wed, 18 Jan 2017, Marc Branchaud wrote:
> > > >
> > > > > On 2017-01-16 05:54 AM, Johannes Schindelin wrote:
> > > > >
> > > > > > On Mon, 16 Jan 2017, Stephan Beyer wrote:
> > > > > >
> > > > > > > a git-newbie-ish co-worker uses git-stash sometimes. Last
> > > > > > > time he used "git stash pop", he got into a merge conflict.
> > > > > > > After he resolved the conflict, he did not know what to do
> > > > > > > to get the repository into the wanted state. In his case, it
> > > > > > > was only "git add <resolved files>" followed by a "git
> > > > > > > reset" and a "git stash drop", but there may be more
> > > > > > > involved cases when your index is not clean before "git
> > > > > > > stash pop" and you want to have your index as before.
> > > > > > >
> > > > > > > This led to the idea to have something like "git stash
> > > > > > > --continue"[1]
> > > > > >
> > > > > > More like "git stash pop --continue". Without the "pop"
> > > > > > command, it does not make too much sense.
> > > > >
> > > > > Why not?  git should be able to remember what stash command
> > > > > created the conflict.  Why should I have to?  Maybe the fire
> > > > > alarm goes off right when I run the stash command, and by the
> > > > > time I get back to it I can't remember which operation I did.
> > > > > It would be nice to be able to tell git to "just finish off (or
> > > > > abort) the stash operation, whatever it was".
> > > >
> > > > That reeks of a big potential for confusion.
> > > >
> > > > Imagine for example a total Git noob who calls `git stash list`,
> > > > scrolls two pages down, then hits `q` by mistake. How would you
> > > > explain to that user that `git stash --continue` does not continue
> > > > showing the list at the third page?
> > >
> > > Sorry, but I have trouble taking that example seriously.  It assumes
> > > such a level of "noobness" that the user doesn't even understand how
> > > standard command output paging works, not just with git but with any
> > > shell command.
> >
> > Yeah, well, I thought you understood what I meant.
> >
> > The example was the best I could come up with quickly, and it only
> > tried to show that there are *other* stash operations that one might
> > perceive to happen at the same time as the "pop" operation, so your
> > flimsical comment "why not continue the latest operation" may very
> > well be ambiguous.
> >
> > And if it is not ambiguous in "stash", it certainly will be in other
> > Git operations. And therefore, having a DWIM in "stash" to allow
> > "--continue" without any specific subcommand, but not having it in
> > other Git commands, is just a very poor user interface design. It is
> > prone to confuse users, which is always a hallmark of a bad user
> > interface.
> 
> Please don't underestimate the power of syntactic consistency in helping
> users achieve their goals.  Having some commands use "git foo
> --continue" while others use "git foo bar --continue" *will* confuse
> people, regardless of how logical the reasons for those differences.
But that ship has already sailed!

By your reasoning, it was a mistake to introduce subcommands such as `git stash pop` in the first place.

> But in the case of stash, I still don't see the utility in having
> operation-specific continuation.

Stephan already gave one good example where you want it: if `git stash pop` fails, you may want to continue by *not* dropping the stash via `git stash apply --continue`.

Show 7 quoted lines
> Consider the following sequence (as you say, this doesn't work yet, but
> making it work seems reasonable):
> 
> 	git stash pop  # creates some conflicts
> 	git stash apply stash@{4} # creates some other conflicts
> 	# (User resolves the conflicts created by the pop.)
> 	git stash pop --continue
Yes, that would make sense: the `pop` would actually drop the stash entry.
> Given the description of the original proposal (do "git reset; git stash
> drop"), what's the state of the index and the working tree?
> 
> In particular, what has the user gained by continuing just that pop?
That it was completed.
> Another thing to ask is, how common is such a scenario likely to be?

We have millions of users. Even a 0.001% chance of anything happening will bite users, who will then come back to bite us.

Let's just not go into the "how likely is this" game.
> I suggest that it will be far more common for users to resolve all the
> conflicts and then want to continue all their interrupted stash
> operations.  If so, fussily forcing them to explicitly continue the pop
> and the apply is just a waste.

No, it is not a waste, as we require the user nothing else than to be precise. Do you want to continue the "stash pop"? Okay, then, call "git stash pop --continue".

Show 6 quoted lines
> [... a lot of stuff skipped, as it is basically ignoring my point...]
>
> > But foo *is the operation*! By that reasoning, you should agree that
> > "git stash --continue" is *wrong*!
> 
> No, in the user's mind *stash* is the operation!

How can that be true? In the user's mind, the *stash* operation is equivalent to the *stash save* operation! Because that is what happens when you call "git stash" without any further command-line parameters.

At this point I will stop commenting on this issue, as I have said all that I wanted to say about it, at least once. If I failed to get my points across so far, I simply won't be understood.

Ciao, Johannes

Previous: Marc BranchaudNext: Marc Branchaud
Message 10 of 16 in “[RFC] stash --continue”
  1. Stephan BeyerJan 15, 2017
  2. Jacob KellerJan 16, 2017
  3. Johannes SchindelinJan 16, 2017
  4. Marc BranchaudJan 18, 2017
  5. Johannes SchindelinJan 18, 2017
  6. Marc BranchaudJan 18, 2017
  7. Samuel LijinJan 18, 2017
  8. Johannes SchindelinJan 19, 2017
  9. Marc BranchaudJan 19, 2017
  10. Johannes SchindelinJan 19, 2017
  11. Marc BranchaudJan 20, 2017
  12. Johannes SchindelinJan 20, 2017
  13. Junio C HamanoJan 18, 2017
  14. Stephan BeyerJan 18, 2017
  15. Johannes SchindelinJan 19, 2017
  16. Junio C HamanoJan 17, 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.