Phil Hord <hordp@xxxxxxxxx> writes: > When we 'git rebase $upstream', git uses 'rev-parse --verify > $current_branch' to find ORIG_HEAD. But if $current_branch > is ambiguous, 'rev-parse --verify' emits a warning and returns > a SHA1 anyway. When the wrong ambiguous choice is used, > git-rebase fails non-gracefully: it emits a warning about > failing to lock $current_branch, an error about being unable to > checkout $current_branch again, and it might even decide the > rebase is a fast-forward when it is not. > > In the 'rebase $upstream' case, we already know the unambiguous > spelling of $current_branch is "HEAD". Fix git-rebase to find > $orig_head unambiguously. Well explained; $current_branch that never appears as a variable in the section of the code in question made me scratch my head while reading it, though. Will queue; thanks. > Add a test in t3400-rebase.sh which creates an ambiguous branch > name and rebases it implicitly with 'git rebase $other'. > > Signed-off-by: Phil Hord <hordp@xxxxxxxxx> > --- > git-rebase.sh | 2 +- > t/t3400-rebase.sh | 7 +++++++ > 2 files changed, 8 insertions(+), 1 deletion(-) > > diff --git a/git-rebase.sh b/git-rebase.sh > index b2f1c76..2c692c3 100755 > --- a/git-rebase.sh > +++ b/git-rebase.sh > @@ -473,7 +473,7 @@ case "$#" in > head_name="detached HEAD" > branch_name=HEAD ;# detached > fi > - orig_head=$(git rev-parse --verify "${branch_name}^0") || exit > + orig_head=$(git rev-parse --verify HEAD) || exit > ;; > *) > die "BUG: unexpected number of arguments left to parse" > diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh > index f6cc102..b58fa1a 100755 > --- a/t/t3400-rebase.sh > +++ b/t/t3400-rebase.sh > @@ -101,7 +101,14 @@ test_expect_success 'HEAD was detached during rebase' ' > test $(git rev-parse HEAD@{1}) != $(git rev-parse my-topic-branch@{1}) > ' > > +test_expect_success 'rebase from ambiguous branch name' ' > + git checkout -b topic side && > + git rebase master > +' > + > test_expect_success 'rebase after merge master' ' > + git checkout --detach refs/tags/topic && > + git branch -D topic && > git reset --hard topic && > git merge master && > git rebase master && -- 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