From: Junio C Hamano Date: Wed, 16 Jul 2008 21:36:47 GMT Subject: Re: [PATCH] rebase-i: keep old parents when preserving merges Message-ID: <7vd4ldpl3k.fsf@gitster.siamese.dyndns.org> In-Reply-To: <1216173109-11155-1-git-send-email-s-beyer@gmx.net> Stephan Beyer writes: ... Based on the discussion thread, here is a rewrite of the log message. > When "rebase -i -p" tries to preserve merges of unrelated branches, it > lost some parents: > > - When you have more than two parents, the commit in the new history > ends up with fewer than expected number of parents and this breakage > goes unnoticed; > > - When you are rebasing a merge with two parents and one is lost, the > command tries to cherry-pick the original merge commit, and the command > fails. > > Signed-off-by: Stephan Beyer > > diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh > index a35212d..0df7640 100755 > --- a/git-rebase--interactive.sh > +++ b/git-rebase--interactive.sh > @@ -174,6 +174,8 @@ pick_one_preserving_merges () { > new_parents="$new_parents $new_p" > ;; > esac > + else > + new_parents="$new_parents $p" > fi > done Reading the surrounding code, it makes me wonder if you also need to futz with variables like $preserve and $fast_forward.