Browse Source

git-rebase: make 'rebase HEAD branch' work as expected.

When you want to amend the commit message of 3 commits before
the tip of the current branch, say 'master',

	A--B--C--D--E(master)

it is sometimes handy to make your head detached at that commit
with:

	$ git checkout HEAD~3 ;# check out B
	$ git commit --amend ;# without modifying contents...

to create:

          .B'(HEAD)
         /
	A--B--C--D--E(master)

and then rebase 'master' branch onto HEAD with this:

	$ git rebase HEAD master

to result in:

          .B'-C'-D'-E(master=HEAD)
         /
	A--B--C--D--E

However, the current code interprets HEAD after it switches to
the branch 'master', which means the rebase will not do
anything.  You have to say something unwieldly like this
instead:

	$ git rebase $(git rev-parse HEAD) master

This fixes it by expanding the $onto commit name before
switching to the target branch.

Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Junio C Hamano 18 years ago
parent
commit
a1bf91e081
  1. 8
      git-rebase.sh

8
git-rebase.sh

@ -265,6 +265,10 @@ upstream_name="$1"
upstream=`git rev-parse --verify "${upstream_name}^0"` || upstream=`git rev-parse --verify "${upstream_name}^0"` ||
die "invalid upstream $upstream_name" die "invalid upstream $upstream_name"


# Make sure the branch to rebase onto is valid.
onto_name=${newbase-"$upstream_name"}
onto=$(git-rev-parse --verify "${onto_name}^0") || exit

# If a hook exists, give it a chance to interrupt # If a hook exists, give it a chance to interrupt
if test -x "$GIT_DIR/hooks/pre-rebase" if test -x "$GIT_DIR/hooks/pre-rebase"
then then
@ -291,10 +295,6 @@ case "$#" in
esac esac
branch=$(git-rev-parse --verify "${branch_name}^0") || exit branch=$(git-rev-parse --verify "${branch_name}^0") || exit


# Make sure the branch to rebase onto is valid.
onto_name=${newbase-"$upstream_name"}
onto=$(git-rev-parse --verify "${onto_name}^0") || exit

# Now we are rebasing commits $upstream..$branch on top of $onto # Now we are rebasing commits $upstream..$branch on top of $onto


# Check if we are already based on $onto, but this should be # Check if we are already based on $onto, but this should be

Loading…
Cancel
Save