summaryrefslogtreecommitdiff
path: root/git-rebase--interactive.sh
diff options
context:
space:
mode:
Diffstat (limited to 'git-rebase--interactive.sh')
-rw-r--r--git-rebase--interactive.sh60
1 files changed, 45 insertions, 15 deletions
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 0d2056f027..44901d53c4 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -115,6 +115,23 @@ mark_action_done () {
fi
}
+append_todo_help () {
+ cat >> "$todo" << EOF
+#
+# Commands:
+# p, pick = use commit
+# r, reword = use commit, but edit the commit message
+# e, edit = use commit, but stop for amending
+# s, squash = use commit, but meld into previous commit
+# f, fixup = like "squash", but discard this commit's log message
+# x, exec = run command (the rest of the line) using shell
+#
+# These lines can be re-ordered; they are executed from top to bottom.
+#
+# If you remove a line here THAT COMMIT WILL BE LOST.
+EOF
+}
+
make_patch () {
sha1_and_parents="$(git rev-list --parents -1 "$1")"
case "$sha1_and_parents" in
@@ -544,6 +561,10 @@ do_next () {
warn
warn " git rebase --continue"
warn
+ if test $status -eq 127 # command not found
+ then
+ status=1
+ fi
exit "$status"
elif test "$dirty" = t
then
@@ -558,22 +579,22 @@ do_next () {
;;
*)
warn "Unknown command: $command $sha1 $rest"
+ fixtodo="Please fix this using 'git rebase --edit-todo'."
if git rev-parse --verify -q "$sha1" >/dev/null
then
- die_with_patch $sha1 "Please fix this in the file $todo."
+ die_with_patch $sha1 "$fixtodo"
else
- die "Please fix this in the file $todo."
+ die "$fixtodo"
fi
;;
esac
test -s "$todo" && return
comment_for_reflog finish &&
- shortonto=$(git rev-parse --short $onto) &&
newhead=$(git rev-parse HEAD) &&
case $head_name in
refs/*)
- message="$GIT_REFLOG_ACTION: $head_name onto $shortonto" &&
+ message="$GIT_REFLOG_ACTION: $head_name onto $onto" &&
git update-ref -m "$message" $head_name $newhead $orig_head &&
git symbolic-ref \
-m "$GIT_REFLOG_ACTION: returning to $head_name" \
@@ -776,6 +797,23 @@ skip)
do_rest
;;
+edit-todo)
+ sed -e '/^#/d' < "$todo" > "$todo".new
+ mv -f "$todo".new "$todo"
+ append_todo_help
+ cat >> "$todo" << EOF
+#
+# You are editing the todo file of an ongoing interactive rebase.
+# To continue rebase after editing, run:
+# git rebase --continue
+#
+EOF
+
+ git_sequence_editor "$todo" ||
+ die "Could not execute editor"
+
+ exit
+ ;;
esac
git var GIT_COMMITTER_IDENT >/dev/null ||
@@ -902,18 +940,10 @@ test -n "$cmd" && add_exec_commands "$todo"
cat >> "$todo" << EOF
# Rebase $shortrevisions onto $shortonto
+EOF
+append_todo_help
+cat >> "$todo" << EOF
#
-# Commands:
-# p, pick = use commit
-# r, reword = use commit, but edit the commit message
-# e, edit = use commit, but stop for amending
-# s, squash = use commit, but meld into previous commit
-# f, fixup = like "squash", but discard this commit's log message
-# x, exec = run command (the rest of the line) using shell
-#
-# These lines can be re-ordered; they are executed from top to bottom.
-#
-# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
EOF