git-rebase--interactive.sh: Make 3-way merge strategies work for -p.
authorBjörn Steinbrink <B.Steinbrink@gmx.de>
Wed, 31 Oct 2007 02:20:32 +0000 (03:20 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 31 Oct 2007 04:29:28 +0000 (21:29 -0700)
git-rebase--interactive.sh used to pass all parents of a merge commit to
git-merge, which means that we have at least 3 heads to merge: HEAD,
first parent and second parent. So 3-way merge strategies like recursive
wouldn't work.

Fortunately, we have checked out the first parent right before the merge
anyway, so that is HEAD. Therefore we can drop simply it from the list
of parents, making 3-way strategies work for merge commits with only
two parents.

Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase--interactive.sh

index db04057653fb896036454001499a1bdeb06907a6..f28c3df204214f691de87cb48c513f1eb5d767e6 100755 (executable)
@@ -165,6 +165,8 @@ pick_one_preserving_merges () {
                        eval "$author_script"
                        msg="$(git cat-file commit $sha1 | \
                                sed -e '1,/^$/d' -e "s/[\"\\]/\\\\&/g")"
+                       # No point in merging the first parent, that's HEAD
+                       new_parents=${new_parents# $first_parent}
                        # NEEDSWORK: give rerere a chance
                        if ! output git merge $STRATEGY -m "$msg" $new_parents
                        then