All of lore.kernel.org
 help / color / mirror / Atom feed
* `git stash pop` UX Problem
@ 2014-02-24  8:32 Omar Othman
  2014-02-24 16:04 ` Brandon McCaig
  0 siblings, 1 reply; 48+ messages in thread
From: Omar Othman @ 2014-02-24  8:32 UTC (permalink / raw)
  To: git

Hi there,

I'm fairly new to git and I wanted to ask about a certain behavior that 
I want to fix myself (if you agree with me that it is a misbehavior)... 
since I've never contributed to open source and it'll be an important 
step for me to start and get something done.

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.

Thanks and sorry for the long email.

^ permalink raw reply	[flat|nested] 48+ messages in thread
* `git stash pop` UX Problem
@ 2014-02-24  8:33 Omar Othman
  0 siblings, 0 replies; 48+ messages in thread
From: Omar Othman @ 2014-02-24  8:33 UTC (permalink / raw)
  To: git

Hi there,

I'm fairly new to git and I wanted to ask about a certain behavior
that I want to fix myself (if you agree with me that it is a
misbehavior)... since I've never contributed to open source and it'll
be an important step for me to start and get something done.

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.

Thanks and sorry for the long email.

-- 
Best Regards,

Omar Othman

^ permalink raw reply	[flat|nested] 48+ messages in thread
* Re: `git stash pop` UX Problem
@ 2014-02-27 11:23 Damien Robert
  0 siblings, 0 replies; 48+ messages in thread
From: Damien Robert @ 2014-02-27 11:23 UTC (permalink / raw)
  To: git; +Cc: Matthieu Moy, Brandon McCaig, Omar Othman

Matthieu Moy  wrote in message <vpqzjlf5q2z.fsf@anie.imag.fr>:
>> Maybe status should display a stash count if that count is > 0, as
>> this is part of the state of the repo.
> Maybe it would help some users, but not me for example. My main use of
> "git stash" is a safe replacement for "git reset --hard": when I want to
> discard changes, but keep them safe just in case.
> So, my stash count is almost always >0, and I don't want to hear about
> it.

Related to your comment, I adapted git-stash
  https://gist.github.com/DamienRobert/9227034
to have the following (mis)features:

- There is a global --ref option that allows to specify the reference the
  stash will use (by default this is refs/mystash, git-stash.sh uses
  refs/stash).

  This allows to differenciate between different uses of stashes: save WIP
  before switching branch; keep a backup before a git reset;...

- There is a new command `git mystash dosave` that works like git stash but
  does not reset the worktree afterwards. Note that `git stash create`
  already does that, but it handles options differently than `git stash
  save`. `git mystash dosave` can be seen as a wrapper around `git stash
  create`.
  The reason is that while `git stash create` is intended for scripts, `git
  mystash dosave` is intended for the UI. One example of when we don't want
  to drop the worktree is when we want to do a `git checkout -m -- paths`
  but we want to save the current state in case the merge has conflicts.

- `git stash branch` pops the stash once the branch is created. I did not
  like this feature so `git mystash branch` does not pop the stash; use `git
  mystash popbranch` to have the original meaning of `git stash branch`.

- `git mystash save` (and `git stash dosave`) has a new option
  `--on-branch` which stores the stash onto the current branch rather than
  in $ref_stash. The idea is that when I use `git stash` for a WIP, then
  when I come back to the original branch I always forget that I had a
  stash for this branch, and if there were several WIP in between it can be
  hard to remember which stash to apply. With `--on-branch`, when I come
  back to the original branch I am now on the stash, and I know I just need
  to apply it. For that `git mystash apply` (or `git mystash pop`) also has
  a `--on-branch` option that tells it to use the stash on the current
  branch.

- `git mystash info` gives informations about a stash.

So obviously not all of these would be good for inclusion into git, but
maybe some of them would be somewhat worth it. When I have the time I'll
try to write tests and send proper patches.

-- 
Damien Robert

^ permalink raw reply	[flat|nested] 48+ messages in thread

end of thread, other threads:[~2014-03-01  8:48 UTC | newest]

Thread overview: 48+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-24  8:32 `git stash pop` UX Problem Omar Othman
2014-02-24 16:04 ` Brandon McCaig
2014-02-24 16:21   ` Matthieu Moy
2014-02-25 12:14     ` Holger Hellmuth
2014-02-25 12:33       ` Matthieu Moy
2014-02-25 13:02         ` Omar Othman
2014-02-25 19:12         ` Junio C Hamano
2014-02-25 20:48           ` Stephen Leake
2014-02-25 22:20             ` Junio C Hamano
2014-02-27 13:18               ` Stephen Leake
2014-02-26  7:37           ` Omar Othman
2014-02-26 15:17           ` Theodore Ts'o
2014-02-25 23:50         ` brian m. carlson
2014-02-26  7:34       ` Omar Othman
2014-02-26  0:39     ` Simon Ruderich
2014-02-27 13:22       ` Stephen Leake
2014-02-25 13:06   ` Omar Othman
2014-02-25 13:15     ` Matthieu Moy
2014-02-25 14:12       ` Omar Othman
2014-02-25 15:25         ` Matthieu Moy
2014-02-25 20:52           ` Stephen Leake
2014-02-25 22:23             ` Junio C Hamano
2014-02-26 10:24               ` Stefan Haller
2014-02-26 10:45                 ` Matthieu Moy
2014-02-28  2:57                   ` Stephen Leake
2014-02-28  4:50                     ` Brandon McCaig
2014-02-28 15:12                       ` Stephen Leake
2014-02-28 15:42                         ` Matthieu Moy
2014-02-28 17:27                           ` Stephen Leake
2014-02-28 19:45                             ` Matthieu Moy
2014-03-01  8:41                               ` Stephen Leake
2014-02-28 16:02                         ` David Kastrup
2014-02-28 17:45                           ` Stephen Leake
2014-02-28 19:39                             ` Matthieu Moy
2014-02-28 17:45                     ` Junio C Hamano
2014-03-01  8:47                       ` Stephen Leake
2014-02-26  7:28           ` Omar Othman
2014-02-26  8:27             ` Matthieu Moy
2014-02-26 19:36               ` Junio C Hamano
2014-02-26 19:46                 ` Matthieu Moy
2014-02-26 20:20                   ` Junio C Hamano
2014-02-26 20:33                   ` David Kastrup
2014-02-26 22:17                     ` Junio C Hamano
2014-02-27  0:19                       ` David Kastrup
2014-02-28  3:00                 ` Stephen Leake
2014-02-27 13:25               ` Stephen Leake
2014-02-24  8:33 Omar Othman
2014-02-27 11:23 Damien Robert

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.