Am 02.07.19 um 19:20 schrieb Junio C Hamano: > Derrick Stolee <stolee@xxxxxxxxx> writes: > >> On 7/1/2019 2:35 PM, Junio C Hamano wrote: >>> Jeff King <peff@xxxxxxxx> writes: >>> >>>>> First, we create a (temporary) merge commit of both branches (M3) >>>>> >>>>> ------------ >>>>> R1---R2---R3---R4---R5---R6---R7---M3 >>>>> \ \ \ / >>>>> F1---F2---M1---F3---F4---M2---F5 >>>>> ------------ >>>>> >> ... >>> If M3 merge is always easier to manage than incremental stepwise >>> rebase of the topic, then doing the "git merge --reverse-squash" >>> would be a saner interface and also conceptually simpler. >> >> I agree that this would be a better way to expose this behavior, >> and likely the implementation could be very clean. > > What I was sort-of hoping to get comments on was actually something > else. > > Would there be cases where the merge M3 gets unmanageably complex > even if rebasing the feature commits one by one is relatively simple > (and how often would that happen)? "merge --squash" would not work > well (and extending the command to merge in a different direction > would not help) in such a situation, but "rebase -i" would work > much better (and "imerge" would, too). I've come across the situation occasionally. Once I have resolved a bunch of conflicts in M1 and M2, I think twice whether I should rebase individual commits; it is typically much more tedious. A common situation is that a line is "A" in F1, "B" in F2, and "C" in R3; then I have to resolve ONE conflict in M1 ("<B=C>"), but with individual commits rebased on top of R3, I have two conflicts, "<C=A>" and "<AC=B>", neither of which is helped by rerere. After merges M1 and M2, it is all a done deal, and M3 is typically a much simpler merge than the sum of conflicts incurred by the individual commits. I would generally not recommend a rebase in this situation. But I wouldn't turn M3 into a squashed merged commit, either, as long as F1...F5 aren't messy. -- Hannes