From: Stephen Haberman Date: Wed, 15 Oct 2008 07:44:39 +0000 (-0500) Subject: rebase-i-p: do not include non-first-parent commits touching UPSTREAM X-Git-Tag: v1.6.1-rc1~95^2~3 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=d80d6bc146232d81f1bb4bc58e5d89263fd228d4;p=git.git rebase-i-p: do not include non-first-parent commits touching UPSTREAM This covers an odd boundary case found by Avi Kivity's script where a branch coming off of UPSTREAM is merged into HEAD. Initially it show up in UPSTREAM..HEAD, but technically UPSTREAM is not moving, the rest of head is, so we should not need to rewrite the merge. This adds a check saying we can keep `preserve=t` if `p=UPSTREAM`...unless this is the first first-parent commit in our UPSTREAM..HEAD rev-list, which could very well point to UPSTREAM, but we still need to consider it as rewritten so we start pulling in the rest of the UPSTREAM..HEAD commits that point to it. Signed-off-by: Stephen Haberman Signed-off-by: Junio C Hamano --- diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 851066f0f..495f554b6 100755 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -583,6 +583,7 @@ first and then run 'git rebase --continue' again." # parents to rewrite and skipping dropped commits would # prematurely end our probe MERGES_OPTION= + first_after_upstream="$(git rev-list --reverse --first-parent $UPSTREAM..$HEAD | head -n 1)" else MERGES_OPTION="--no-merges --cherry-pick" fi @@ -603,7 +604,7 @@ first and then run 'git rebase --continue' again." preserve=t for p in $(git rev-list --parents -1 $sha1 | cut -d' ' -f2-) do - if test -f "$REWRITTEN"/$p + if test -f "$REWRITTEN"/$p -a \( $p != $UPSTREAM -o $sha1 = $first_after_upstream \) then preserve=f fi