Ben Woosley <Ben.Woosley@xxxxxxxxx> writes: > From: Ben Woosley <ben.woosley@xxxxxxxxx> > > 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@xxxxxxxxx> > --- > 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html