diff options
author | Junio C Hamano <junkio@cox.net> | 2005-06-25 02:23:43 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-25 16:52:16 -0700 |
commit | 59e6b23acef9d29b9bdabc38ee80361e19ef7ebe (patch) | |
tree | 32e674e352960114da7940e79f7ba1d23d3c818e | |
parent | [PATCH] git-cherry: find commits not merged upstream. (diff) | |
download | tgif-59e6b23acef9d29b9bdabc38ee80361e19ef7ebe.tar.xz |
[PATCH] git-rebase-script: rebase local commits to new upstream head.
Using git-cherry, forward port local commits missing from the
new upstream head. This also depends on "-m" flag support in
git-commit-script.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | Makefile | 2 | ||||
-rwxr-xr-x | git-rebase-script | 49 |
2 files changed, 50 insertions, 1 deletions
@@ -25,7 +25,7 @@ SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \ git-deltafy-script git-fetch-script git-status-script git-commit-script \ git-log-script git-shortlog git-cvsimport-script git-diff-script \ git-reset-script git-add-script git-checkout-script git-clone-script \ - gitk git-cherry + gitk git-cherry git-rebase-script PROG= git-update-cache git-diff-files git-init-db git-write-tree \ git-read-tree git-commit-tree git-cat-file git-fsck-cache \ diff --git a/git-rebase-script b/git-rebase-script new file mode 100755 index 0000000000..10ab700d04 --- /dev/null +++ b/git-rebase-script @@ -0,0 +1,49 @@ +#!/bin/sh +# +# Copyright (c) 2005 Junio C Hamano. +# + +usage="usage: $0 "'<upstream> [<head>] + +Uses output from git-cherry to rebase local commits to the new head of +upstream tree.' + +: ${GIT_DIR=.git} + +case "$#" in +1) linus=`git-rev-parse "$1"` && + junio=`git-rev-parse HEAD` || exit + ;; +2) linus=`git-rev-parse "$1"` && + junio=`git-rev-parse "$2"` || exit + ;; +*) echo >&2 "$usage"; exit 1 ;; +esac + +git-read-tree -m -u $junio $linus && +echo "$linus" >"$GIT_DIR/HEAD" || exit + +tmp=.rebase-tmp$$ +fail=$tmp-fail +trap "rm -rf $tmp-*" 0 1 2 3 15 + +>$fail + +git-cherry $linus $junio | +while read sign commit +do + case "$sign" in + -) continue ;; + esac + S=`cat "$GIT_DIR/HEAD"` && + GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p $commit && + git-commit-script -m "$commit" || { + echo $commit >>$fail + git-read-tree --reset -u $S + } +done +if test -s $fail +then + echo Some commits could not be rebased, check by hand: + cat $fail +fi |