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

Re: [RFC] stash --continue

From
Marc Branchaud <marcnarc@xiplink.com>
Date
Jan 18, 2017, 18:44 UTC
Message-ID
<38d592b8-975c-1fd9-4c42-877e34a4ab70@xiplink.com>
In-Reply-To
<alpine.DEB.2.20.1701181725130.3469@virtualbox>
On 2017-01-18 11:34 AM, Johannes Schindelin wrote:
Show 34 quoted lines
> Hi Marc,
>
> 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.

> Even worse: `git stash` (without arguments) defaults to the `save`
> operation, so any user who does not read the documentation (and who does?)
> would assume that `git stash --continue` *also* implies `save`.

Like the first example, your user is trying to "continue" a command that is already complete. It's like try to do "git rebase --continue" when there's no rebase operation underway.

Now, maybe there is some way for "git stash save" (implied or explicit) to stop partway through the operation. I can't imagine such a situation (out of disk space, maybe?), particularly where the user would expect "git stash save" to leave things in a half-finished state. To me "git stash save" should be essentially all-or-nothing.

However, if there were such a partial-failure scenario, then I think it would be perfectly reasonable for "git stash --continue" to finish the save operation, assuming that the failure condition has been resolved.

Show 6 quoted lines
> If that was not enough, there would still be the overall design of Git's
> user interface. You can call it confusing, inconsistent, with a lot of
> room for improvement, and you would be correct. But none of Git's commands
> has a `--continue` option that remembers the latest subcommand and
> continues that. To introduce that behavior in `git stash` would disimprove
> the situation.

I think it's more the case that none of the current continuable commands have subcommands (though I can't think of all the continuable or abortable operations offhand, so maybe I'm wrong). I think we're discussing new UI ground here.

And since the pattern is already "git foo --continue", it seems more consistent to me for it to be "git stash --continue" as well. Especially since there can be only one partially-complete stash sub-operation at one time (per workdir, at least). So there's no reason to change the pattern just for the stash command.

Think of it this way: All the currently continuable/abortable commands put the repository in a shaky state, where performing certain other operations would be ill advised. Attempting to start a rebase while a merge conflict is unresolved, for example. IIRC, git actually tries to stop users from shooting their feet in this way.

And so it should be for the stash operation: If applying a stash yields a conflict, it has to be resolved or aborted before something like a rebase or merge is attempted. It doesn't matter which stash subcommand created the shaky situation.

In the long run, I think there's even the possibility of generic "git continue" and "git abort" commands, that simply continue or abort the current partially-complete operation, whatever it is. (Isn't that the ultimate goal of all the "sequencer" work? I admit I have not been following that effort.)

> With every new feature, it is not enough to consider its benefits. You
> always have to take the potential fallout into account, too.
Agreed.
> At least `git stash pop --continue` would be consistent with all other
> `--continue` options in Git that I can think of...
Alas, I disagree!
		M.
Previous: Johannes SchindelinNext: Samuel Lijin
Message 6 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.