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

Re: `git stash pop` UX Problem

From
OOOmar Othman <omar.othman@booking.com>
Date
Feb 25, 2014, 13:06 UTC
Message-ID
<530C953F.9050805@booking.com>
In-Reply-To
<CANUGeEbPrPp8Sa-KEKSxNDWJShdkDBTkQyXv7tDJ6ReH6MXrHw@mail.gmail.com>
Brandon:

Please note that what I am asking for is not always dropping the stash, but doing that *only* when the merge conflict is resolved. This is simply getting the whole command to be consistent. If you do `git stash pop` and it succeeds, the stash reference is dropped. If you do `git stash pop` and it succeeds *after resolving the merge conflict*, the stash reference is *not* dropped. This is *not* consistent and *is* a user experience problem. I'm not asking about dumbing git down by any means.

On 24-02-14 17:04, Brandon McCaig wrote:
Show 69 quoted lines
> Omar:
>
> On Mon, Feb 24, 2014 at 3:32 AM, Omar Othman <omar.othman@booking.com> wrote:
>> In general, whenever something a user "should" do, git always tells. So, for
>> example, when things go wrong with a merge, you have the option to abort.
>> When you are doing a rebase, git tells you to do git commit --amend, and
>> then git rebase --continue... and so on.
>>
>> The point is: Because of this, git is expected to always instruct you on
>> what to do next in a multilevel operation, or instructing you what to do
>> when an operation has gone wrong.
>>
>> Now comes the problem. When you do a git stash pop, and a merge conflict
>> happens, git correctly tells you to fix the problems and then git add to
>> resolve the conflict. But once that happens, and the internal status of git
>> tells you that there are no more problems (I have a prompt that tells me
>> git's internal status), the operation is not culminated by dropping the
>> stash reference, which what normally happens automatically after a git stash
>> pop. This has actually confused me for a lot of time, till I ran into a git
>> committer and asked him, and only then were I 100% confident that I did
>> nothing wrong and it is indeed a UX problem. I wasted a lot of time to know
>> why the operation is not completed as expected (since I trusted that git
>> just does the right thing), and it turned out that it is git's fault.
>>
>> If this is accepted, please reply to this email and tell me to start working
>> on it. I've read the Documenation/SubmittingPatches guidelines, but I'll
>> appreciate also telling me where to base my change. My guess is maint, since
>> it's a "bug" in the sense of UX.
> Unlike a merge, when you pop a stash that history is lost. If you
> screw up the merge and the stash is dropped then there's generally no
> reliable way to get it back. I think that it's correct behavior for
> the stash to not be dropped if the merge conflicts. The user is
> expected to manually drop the stash when they're done with it. It's
> been a while since I've relied much on the stash (commits and branches
> are more powerful to work with) so I'm not really familiar with what
> help the UI gives when a conflict occurs now. Git's UI never really
> expects the user to be negligent. It does help to hint to you what is
> needed, but for the most part it still expects you to know what you're
> doing and does what you say, not what you mean.
>
> If there's any change that should be made it should be purely
> providing more detailed instructions to the user about how to deal
> with it. Either resolve the merge conflicts and git-add the
> conflicting files, or use git-reset to either reset the index
> (unstaging files nad clear) or reset index and working tree back to
> HEAD. In general, I almost always git-reset after a git-stash pop
> because I'm probably not ready to commit those changes yet and
> generally want to still see those changes with git diff (without
> --staged). Or perhaps just direct them to the appropriate sections of
> the man pages.
>
> I'm not really in favor of "dumbing down" Git in any way and I think
> that any step in that direction would be for the worst... Software
> should do what you say, not what you mean, because it's impossible to
> reliably guess what you meant. When a git-stash pop operation fails
> that might make the user rethink popping that stash. That's why it
> becomes a manual operation to drop it if still desired. And unlike
> git-reset --continue, which is explicitly the user saying "it is fixed
> and I accept the consequences, let's move on", there is no such option
> to git-stash to acknowledge that the merge conflicts have been
> resolved and you no longer need that stash (aside from git-stash drop,
> of course). It's not a UI problem. It's maybe a documentation problem,
> but again I'm not familiar with the current state of that.
>
> /not a git dev...yet
>
> Regards,
>
>
Previous: Stephen LeakeNext: Matthieu Moy
Message 17 of 46 in “`git stash pop` UX Problem”
  1. Omar OthmanFeb 24, 2014
  2. Brandon McCaigFeb 24, 2014
  3. Matthieu MoyFeb 24, 2014
  4. Holger HellmuthFeb 25, 2014
  5. Matthieu MoyFeb 25, 2014
  6. Omar OthmanFeb 25, 2014
  7. Junio C HamanoFeb 25, 2014
  8. Stephen LeakeFeb 25, 2014
  9. Junio C HamanoFeb 25, 2014
  10. Stephen LeakeFeb 27, 2014
  11. Omar OthmanFeb 26, 2014
  12. Theodore Ts'oFeb 26, 2014
  13. brian m. carlsonFeb 25, 2014
  14. Omar OthmanFeb 26, 2014
  15. Simon RuderichFeb 26, 2014
  16. Stephen LeakeFeb 27, 2014
  17. Omar OthmanFeb 25, 2014
  18. Matthieu MoyFeb 25, 2014
  19. Omar OthmanFeb 25, 2014
  20. Matthieu MoyFeb 25, 2014
  21. Stephen LeakeFeb 25, 2014
  22. Junio C HamanoFeb 25, 2014
  23. Stefan HallerFeb 26, 2014
  24. Matthieu MoyFeb 26, 2014
  25. Stephen LeakeFeb 28, 2014
  26. Brandon McCaigFeb 28, 2014
  27. Stephen LeakeFeb 28, 2014
  28. Matthieu MoyFeb 28, 2014
  29. Stephen LeakeFeb 28, 2014
  30. Matthieu MoyFeb 28, 2014
  31. Stephen LeakeMar 1, 2014
  32. David KastrupFeb 28, 2014
  33. Stephen LeakeFeb 28, 2014
  34. Matthieu MoyFeb 28, 2014
  35. Junio C HamanoFeb 28, 2014
  36. Stephen LeakeMar 1, 2014
  37. Omar OthmanFeb 26, 2014
  38. Matthieu MoyFeb 26, 2014
  39. Junio C HamanoFeb 26, 2014
  40. Matthieu MoyFeb 26, 2014
  41. Junio C HamanoFeb 26, 2014
  42. David KastrupFeb 26, 2014
  43. Junio C HamanoFeb 26, 2014
  44. David KastrupFeb 27, 2014
  45. Stephen LeakeFeb 28, 2014
  46. Stephen LeakeFeb 27, 2014

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.