rebase -i: Teach "--edit-todo" action
This allows users to edit the todo file while they're stopped in the middle of an interactive rebase. When this action is executed, all comments from the original todo file are stripped, and new help messages are appended to the end. Signed-off-by: Andrew Wong <andrew.kw.w@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fcc5ef1cc9
commit
eb9a7cb4bd
@ -12,7 +12,7 @@ SYNOPSIS
|
||||
[<upstream>] [<branch>]
|
||||
'git rebase' [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>]
|
||||
--root [<branch>]
|
||||
'git rebase' --continue | --skip | --abort
|
||||
'git rebase' --continue | --skip | --abort | --edit-todo
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
@ -245,6 +245,9 @@ leave out at most one of A and B, in which case it defaults to HEAD.
|
||||
--skip::
|
||||
Restart the rebasing process by skipping the current patch.
|
||||
|
||||
--edit-todo::
|
||||
Edit the todo list during an interactive rebase.
|
||||
|
||||
-m::
|
||||
--merge::
|
||||
Use merging strategies to rebase. When the recursive (default) merge
|
||||
|
@ -792,6 +792,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 ||
|
||||
|
@ -8,7 +8,7 @@ OPTIONS_KEEPDASHDASH=
|
||||
OPTIONS_SPEC="\
|
||||
git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
|
||||
git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
|
||||
git-rebase --continue | --abort | --skip
|
||||
git-rebase --continue | --abort | --skip | --edit-todo
|
||||
--
|
||||
Available options are
|
||||
v,verbose! display a diffstat of what changed upstream
|
||||
@ -38,6 +38,7 @@ C=! passed to 'git apply'
|
||||
continue! continue
|
||||
abort! abort and check out the original branch
|
||||
skip! skip current patch and continue
|
||||
edit-todo! edit the todo list during an interactive rebase
|
||||
"
|
||||
. git-sh-setup
|
||||
. git-sh-i18n
|
||||
@ -190,7 +191,7 @@ do
|
||||
--verify)
|
||||
ok_to_skip_pre_rebase=
|
||||
;;
|
||||
--continue|--skip|--abort)
|
||||
--continue|--skip|--abort|--edit-todo)
|
||||
test $total_argc -eq 2 || usage
|
||||
action=${1##--}
|
||||
;;
|
||||
@ -306,6 +307,11 @@ then
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$action" = "edit-todo" && test "$type" != "interactive"
|
||||
then
|
||||
die "$(gettext "The --edit-todo action can only be used during interactive rebase.")"
|
||||
fi
|
||||
|
||||
case "$action" in
|
||||
continue)
|
||||
# Sanity check
|
||||
@ -338,6 +344,9 @@ abort)
|
||||
rm -r "$state_dir"
|
||||
exit
|
||||
;;
|
||||
edit-todo)
|
||||
run_specific_rebase
|
||||
;;
|
||||
esac
|
||||
|
||||
# Make sure no rebase is in progress
|
||||
|
Loading…
Reference in New Issue
Block a user