Hi Marc, On Thu, 19 Jan 2017, Marc Branchaud wrote: > 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`. > 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". > [... 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