Re: [RFC] Rebasing merges: a jorney to the ultimate solution (Road Clear)
- From
- Igor Djordjevic <igor.d.djordjevic@gmail.com>
- Date
- Feb 28, 2018, 01:33 UTC
- Message-ID
- <8829c395-fb84-2db0-9288-f7b28fa0d0d1@gmail.com>
- In-Reply-To
- <CA+P7+xrzxYSE0OyL8uyF+ErwfWFEgcqnHmaciwWkK-76sQ6ktw@mail.gmail.com>
On 28/02/2018 01:36, Jacob Keller wrote:
Show 18 quoted lines
> > > > (3) ---X1---o---o---o---o---o---X2 > > > |\ |\ > > > | A1---A2---A3---U1 | A1'--A2'--A3'--U1' > > > | \ | > > > | M | > > > | / | > > > \-B1---B2---B3---U2 \-B1'--B2'--B3'--U2' > > > > > > > Meh, I hope I`m rushing it now, but for example, if we had decided to > > drop commit A2 during an interactive rebase (so losing A2' from > > diagram above), wouldn`t U2' still introduce those changes back, once > > U1' and U2' are merged, being incorrect/unwanted behavior...? :/ > > In that case, the method won't work well at all, so I think we need a > different approach. >
Hmm, still rushing it, but what about adding an additional step,
something like this:
(4) ---X1---o---o---o---o---o---X2
|\ |\
| A1---A2---A3---U1 | A1'--A2'--A3'--U1'--R1
| \ |
| M |
| / |
\-B1---B2---B3---U2 \-B1'--B2'--B3'--U2'--R2... where:
R1 = git diff U2 U2' | git apply --3way R2 = git diff U1 U1' | git apply --3way
(this is just to explain the point, might be there is a better way to produce Rx)
So, we still use Ux' to preserve merge commit M amendments, but also Rx to catch any changes happening between Ux and Ux' caused by interactive rebase commit manipulation (add/amend/drop).
Note that R*1* is produced by applying diff from U*2*' side, and vice versa (as it`s the other side that can erroneously introduce dropped commit changes back, like U2' in case of dropped A2').
From here we continue as before - merging R1 and R2, then rewriting merge commit parents to point to A3' and B3' (dropping Ux` and Rx).
This seems to be working inside my (too trivial?) test case, for interactive adding, dropping, and amending of rebased commits, resulting "rebased" merge containing all the added/modified/dropped changes, plus the original merge amendment, all as expected :P
Regards, Buga