Re: [RFC] Rebasing merges: a jorney to the ultimate solution (Road Clear)
From: Igor Djordjevic <hidden>
Date: 2018-02-28 02:12:51
Hi Johannes, On 28/02/2018 00:27, Johannes Schindelin wrote:
thank you for making this a lot more understandable to this thick developer.
Hehe, no problem, it primarily served fighting my own thickness ;)
quoted
Finally, we drop temporary commits, and record rebased commits A3' and B3' as our "rebased" merge commit parents instead (merge commit M' keeps its same tree/snapshot state, just gets parents replaced): (5) ---X1---o---o---o---o---o---X2 |\ |\ | A1---A2---A3---U1 | A1'--A2'--A3' | \ | \ | M | M' | / | / \-B1---B2---B3---U2 \-B1'--B2'--B3'... In my example, where I dropped A1' specifically so that that embarrasingly incorrect change to the README would not be seen by the world, though, the evil merge would be truly evil: it would show said change to the world. The exact opposite of what I wanted.
Yeah, I`m afraid that`s what my testing produced as well :( Back to the drawing board...
It would have been nice to have such a simple solution ;-)
Eh, the worst thing is the feeling I have, like it`s just around the corner, but we`re somehow missing it :P
So the most obvious way to try to fix this design would be to recreate the original merge first, even with merge conflicts, and then trying to use the diff between that and the actual original merge commit.
For simplicity sake, this is something I would like to avoid (if possible), and also for the reasons you mentioned yourself:
Now, would this work? I doubt it, for at least two reasons: - if there are merge conflicts between A3/B3 and between A3'/B3', those merge conflicts will very likely look very different, and the conflicts when reverting R will contain those nested conflicts: utterly confusing. And those conflicts will look even more confusing if a patch (such as A1') was dropped during an interactive rebase. - One of the promises was that the new way would also handle merge strategies other than recursive. What would happen, for example, if M was generated using `-s ours` (read: dropping the B* patches' changes) and if B1 had been cherry-picked into the history between X1..X2? Reverting R would obviously revert those B1 changes, even if B1' would obviously not even be part of the rebased history! ... But maybe I missed something obvious, and the design can still be fixed somehow?
Would additional step as suggested in [1] (using R1 and R2 to "catch" interactive rebase additions/amendments/drops, on top of U1' and U2'), make more sense (or provide an additional clue, at least)? It`s late here, and I`m really rushing it now, so please forgive me if it`s a stupid one... :$ Regards, Buga [1] https://public-inbox.org/git/8829c395-fb84-2db0-9288-f7b28fa0d0d1@gmail.com/