diff options
author | Junio C Hamano <junkio@cox.net> | 2007-03-22 02:54:59 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-03-22 02:56:53 -0700 |
commit | a1bf91e081de236af34bf8acd484881ce146fc93 (patch) | |
tree | 3a4d17c1ddca4bf1c3c63f048d1f54cbbc5e1d6f /git-rebase.sh | |
parent | 1d848f643cd8ba86044d729d08d6866425c1539e (diff) | |
download | git-a1bf91e081de236af34bf8acd484881ce146fc93.tar.gz |
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>
Diffstat (limited to 'git-rebase.sh')
-rwxr-xr-x | git-rebase.sh | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/git-rebase.sh b/git-rebase.sh index b51d19d12e..aadd580f8d 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -265,6 +265,10 @@ upstream_name="$1" upstream=`git rev-parse --verify "${upstream_name}^0"` || 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 test -x "$GIT_DIR/hooks/pre-rebase" then @@ -291,10 +295,6 @@ case "$#" in esac 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 # Check if we are already based on $onto, but this should be |