4 case "$1" in -f|
--force) shift; force
=t
;; esac
8 if test -z "$force" && test -z "$(git rev-list .."$TO")"
10 echo "Nothing new in $TO; To force a rebase, use the --force, Luke!" >&2
14 TODO_EXTRA
="$(git rev-parse --git-dir)/todo-extra"
16 # Rebase 'devel' on top of 'junio/next', the merging the old state of
17 # 'devel' with the merge strategy 'ours' to enable a fast-forward.
19 case "$(git rev-parse --symbolic-full-name HEAD)" in
21 UPSTREAM
=$
(git rev-parse
--symbolic-full-name HEAD@
{u
}) ||
{
22 echo "Not tracking any remote branch!" >&2
25 test "$(git rev-parse HEAD)" = "$(git rev-parse $UPSTREAM)" ||
26 test "$(git rev-parse devel@{1})" = "$(git rev-parse $UPSTREAM)" ||
{
27 echo "Your 'devel' is not up-to-date!" >&2
33 echo "Not on 'devel'!" >&2
38 # Find old rebasing merge, if any
42 MERGE
=$
(git rev-list
--parents $TO.. |
sed -n 's/ .* .*//p' |
head -n 1)
43 if test "$(git rev-parse $MERGE:)" = "$(git rev-parse "$MERGE^
:")"
45 ORIG_HEAD
=$
(git rev-parse HEAD
) &&
46 # Find prior merges to $TO
47 EXCLUDE
=$
(git rev-list
--parents $TO..
$MERGE^ |
48 sed -n 's/^\([^ ]*\) .* .*/^\1/p') &&
49 # Get commits from previous rebasing merge
50 git rev-list
--pretty=oneline
--abbrev-commit --abbrev=7 --reverse \
51 --no-merges $TO..
$MERGE^
$EXCLUDE |
52 sed 's/^/pick /' > "$TODO_EXTRA" &&
53 TMP_EDITOR
="$(git rev-parse --git-dir)/rebasing-editor.sh" &&
54 cat > "$TMP_EDITOR" << EOF &&
58 cat "\$1" >> "$TODO_EXTRA" &&
59 mv "$TODO_EXTRA" "\$1"
61 exec "$(git var GIT_EDITOR)" "\$@"
63 TO_SHA1
=$
(git rev-parse
--short $TO) &&
64 chmod a
+x
"$TMP_EDITOR" &&
65 if GIT_EDITOR
="$TMP_EDITOR" git rebase
-i $MERGE --onto $TO
67 git merge
-s ours
-m "Rebasing merge to $TO ($TO_SHA1)" \
70 FINISH
="$(git rev-parse --git-dir)/finish-rebasing-merge.sh"
71 cat > "$FINISH" << EOF
72 git merge -s ours -m "Rebasing merge to $TO ($TO_SHA1)" $ORIG_HEAD
77 After the rebase, call '$FINISH' manually