Re: Question about merge & cherry pick
- From
- Julien Maurel <julien@maurel.me>
- Date
- Nov 7, 2024, 10:32 UTC
- Message-ID
- <a129e967-efba-48ba-b5a0-1abbb0af5c9d@maurel.me>
- In-Reply-To
- <eb367098-0c88-4bc6-b824-32ee6e6d273e@kdbg.org>
Ok, I didn't have this vision about how merge is apply, thanks. There is no option to merge by considering each commit individually ? Rebase do it but not applicable in my case :) Thanks.
Le 07/11/2024 à 07:37, Johannes Sixt a écrit :
Show 33 quoted lines
> Am 06.11.24 um 21:24 schrieb Julien Maurel: >> From my point of view, after these operations, content on branch master >> and dev should be same with "zZz" on second line and "eDe" on last one. >> But it's not the case on second line... > The behavior that you observe is as intended and not a bug. > > You have this (consider each letter on its own line): > > A Z Q E initial commit > / \ > A Y Q E | dev: Z -> Y > | | > | A Y Q E master: cherry-pick Z -> Y > | | > A Z Q D | dev: revert Y -> Z and change E -> D > \ / > A Y Q D merge > > Your expectation that the merge result is "A Z Q D" is wrong. Consider > what happened on the dev branch (left) since the branches diverged: > Since the change from Z to Y was reverted to Z, the only change that the > dev side contributes to the merge is that of E to D. The master side, on > the other hand, contributes the change of Z to Y. So the total of the > merge must be Z to Y from the master side and E to D from the dev side, > and that is what you get. > > A merge does not consider the individual changes on the branches, but > only the differences since the merge base. For the merge operation, the > change from Z to Y never happened on the dev side. The reversal of Y to > Z is not visible for the merge and cannot contribute to the result. > > -- Hannes >