Thread (7 messages) 7 messages, 5 authors, 2021-03-12

Re: [Bug] Stashing during merge loses MERGING state

flat view

From: Tassilo Horn <hidden>
Date: 2021-03-11 20:44:46

Jeff King [off-list ref] writes:

Hi Jeff,
quoted
What did you expect to happen? (Expected behavior)

I expected that stashing during a merge will keep the MERGING state.
Thanks for providing a clear recipe and expectation. However, I think
Git is working here as intended. The MERGE_HEAD file (which is how "git
status", the prompt, etc figure out that we're in the middle of a merge)
is cleaned up when stash runs "git reset --hard" under the hood.

However, I don't think we would want to _not_ clear that file. The
conflicted merge placed some changes into the index and working tree
representing what happened on the branch you're merging in. Then
making the stash (and the reset of the working tree) removes those
changes. If we were to leave MERGE_HEAD in place and you ran "git
commit", then it would create a merge commit that claims to have
incorporated everything from the other branch, but has quietly dropped
those changes as part of the merge resolution.
Yes, that makes sense.
quoted
Or that popping the stash again would also restore the MERGING state.
This would make more sense: the stash records that part of the state,
and then we make it available again later when the stash is applied.
However, that feature doesn't exist yet.
Too bad.
I can't offhand think of a reason it couldn't be implemented. It's
possible that it would mess with somebody else's workflow (e.g., they
think it's useful to stash some changes independent of the merging
state, and then apply it later, perhaps while replaying the same or a
similar merge). So it might need to be tied to a command-line option
or similar.
Everything breakes someones workflow [1], so an option would be fine.

However, I'd suggest to protect users shooting in their foot with a
warning and confirmation query for the time being.  I consider myself a
quite experienced git user but this stash trouble today came totally
unexpected.  And I've asked on #git@irc.freenode.net and got no answer
which is totally uncommon.  So I guess that this stash during merge
thing is pretty much a gray area.

Bye,
Tassilo

[1] https://xkcd.com/1172/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help