All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Ben Woosley <Ben.Woosley@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] git-rebase--merge: don't include absent parent as a base
Date: Wed, 20 Apr 2016 14:13:49 -0700	[thread overview]
Message-ID: <xmqq1t60ugoi.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <0102015434e7556a-2d9848cb-93c3-4883-96ec-c0c70098796b-000000@eu-west-1.amazonses.com> (Ben Woosley's message of "Wed, 20 Apr 2016 18:20:56 +0000")

Ben Woosley <Ben.Woosley@gmail.com> writes:

> From: Ben Woosley <ben.woosley@gmail.com>
>
> Absent this fix, attempts to rebase an orphan branch with --strategy recursive
> will fail with:
>
>     $ git rebase ORPHAN_TARGET_BASE -s recursive
>     First, rewinding head to replay your work on top of it...
>     fatal: Could not parse object 'ORPHAN_ROOT_SHA^'
>     Unknown exit code (128) from command: git-merge-recursive ORPHAN_ROOT_SHA^ -- HEAD ORPHAN_ROOT_SHA
>
> To fix, this will only include the rebase root's parent as a base if it exists,
> so that in cases of rebasing an orphan branch, it is a simple two-way merge.
>
> Note the default rebase behavior does not fail:
>
>     $ git rebase ORPHAN_TARGET_BASE
>     First, rewinding head to replay your work on top of it...
>     Applying: ORPHAN_ROOT_COMMIT_MSG
>     Using index info to reconstruct a base tree...
>
> Signed-off-by: Ben Woosley <ben.woosley@gmail.com>
> ---
>  git-rebase--merge.sh    | 4 +++-
>  t/t3402-rebase-merge.sh | 9 +++++++++
>  2 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/git-rebase--merge.sh b/git-rebase--merge.sh
> index 2cc2a6d..8d43db9 100644
> --- a/git-rebase--merge.sh
> +++ b/git-rebase--merge.sh
> @@ -67,7 +67,9 @@ call_merge () {
>  		GIT_MERGE_VERBOSITY=1 && export GIT_MERGE_VERBOSITY
>  	fi
>  	test -z "$strategy" && strategy=recursive
> -	eval 'git-merge-$strategy' $strategy_opts '"$cmt^" -- "$hd" "$cmt"'
> +	# If cmt doesn't have a parent, don't include it as a base
> +	base=$(git rev-parse --verify --quiet $cmt^)
> +	eval 'git-merge-$strategy' $strategy_opts $base ' -- "$hd" "$cmt"'

Makes sense to me.  It is not clear if such a merge without common
ancestor is all that useful, but as it is mechanically possible,
I do not see a reason to forbid it.

>  	rv=$?
>  	case "$rv" in
>  	0)
> diff --git a/t/t3402-rebase-merge.sh b/t/t3402-rebase-merge.sh
> index 8f64505..488945e 100755
> --- a/t/t3402-rebase-merge.sh
> +++ b/t/t3402-rebase-merge.sh
> @@ -85,6 +85,15 @@ test_expect_success 'rebase -Xtheirs' '
>  	! grep 11 original
>  '
>  
> +test_expect_success 'rebase -Xtheirs from orphan' '
> +	git checkout --orphan orphan-conflicting master~2 &&
> +	echo "AB $T" >> original &&
> +	git commit -morphan-conflicting original &&
> +	git rebase -Xtheirs master &&
> +	grep AB original &&
> +	! grep 11 original
> +'
> +
>  test_expect_success 'merge and rebase should match' '
>  	git diff-tree -r test-rebase test-merge >difference &&
>  	if test -s difference
>
> --
> https://github.com/git/git/pull/228

  reply	other threads:[~2016-04-20 21:13 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-20 18:20 [PATCH] git-rebase--merge: don't include absent parent as a base Ben Woosley
2016-04-20 21:13 ` Junio C Hamano [this message]
2016-04-20 21:19   ` Ben Woosley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqq1t60ugoi.fsf@gitster.mtv.corp.google.com \
    --to=gitster@pobox.com \
    --cc=Ben.Woosley@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.