summaryrefslogtreecommitdiff
path: root/git-rebase.sh
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-12-14 17:30:03 -0800
committerJunio C Hamano <junkio@cox.net>2005-12-14 17:30:03 -0800
commit1ed91937e5cd59fdbdfa5f15f6fac132d2b21ce0 (patch)
treef65b929c006c31043213152752ea0c80bf08b9e5 /git-rebase.sh
parenta9572072f0ab0ac97e64b0dc01254a3ad95befe1 (diff)
parent294c695d8cfbcf95a5c33fc6ba386f496964defb (diff)
GIT 0.99.9n aka 1.0rc6v1.0rc6v0.99.9n
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-xgit-rebase.sh33
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