diff options
author | Junio C Hamano <junkio@cox.net> | 2005-12-14 17:30:03 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-12-14 17:30:03 -0800 |
commit | 1ed91937e5cd59fdbdfa5f15f6fac132d2b21ce0 (patch) | |
tree | f65b929c006c31043213152752ea0c80bf08b9e5 /git-rebase.sh | |
parent | a9572072f0ab0ac97e64b0dc01254a3ad95befe1 (diff) | |
parent | 294c695d8cfbcf95a5c33fc6ba386f496964defb (diff) |
Oh, I hate to do this but I ended up merging big usage string
cleanups from Fredrik, git-am enhancements that made a lot of
sense for non mbox users from HPA, and rebase changes (done
independently by me and Lukas) among other things, so git is
still in perpetual state of 1.0rc. 1.0 will probably be next
Wednesday, but who knows.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-rebase.sh')
-rwxr-xr-x | git-rebase.sh | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/git-rebase.sh b/git-rebase.sh index 638ff0dbc0..16d4359830 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -3,8 +3,11 @@ # Copyright (c) 2005 Junio C Hamano. # +USAGE='<upstream> [<head>]' . git-sh-setup +case $# in 1|2) ;; *) usage ;; esac + # Make sure we do not have .dotest if mkdir .dotest then @@ -18,31 +21,30 @@ you still have something valuable there.' exit 1 fi -# The other head is given. Make sure it is valid. -other=$(git-rev-parse --verify "$1^0") || exit - -# Make sure we have HEAD that is valid. -head=$(git-rev-parse --verify "HEAD^0") || exit - # The tree must be really really clean. git-update-index --refresh || exit diff=$(git-diff-index --cached --name-status -r HEAD) -case "$different" in +case "$diff" in ?*) echo "$diff" exit 1 ;; esac +# The other head is given. Make sure it is valid. +other=$(git-rev-parse --verify "$1^0") || usage + +# Make sure the branch to rebase is valid. +head=$(git-rev-parse --verify "${2-HEAD}^0") || exit + # If the branch to rebase is given, first switch to it. case "$#" in 2) - git-checkout "$2" || exit + git-checkout "$2" || usage esac -# If the HEAD is a proper descendant of $other, we do not even need -# to rebase. Make sure we do not do needless rebase. In such a -# case, merge-base should be the same as "$other". mb=$(git-merge-base "$other" "$head") + +# Check if we are already based on $other. if test "$mb" = "$other" then echo >&2 "Current branch `git-symbolic-ref HEAD` is up to date." @@ -51,5 +53,14 @@ fi # Rewind the head to "$other" git-reset --hard "$other" + +# If the $other is a proper descendant of the tip of the branch, then +# we just fast forwarded. +if test "$mb" = "$head" +then + echo >&2 "Fast-forwarded $head to $other." + exit 0 +fi + git-format-patch -k --stdout --full-index "$other" ORIG_HEAD | git am --binary -3 -k |