rebase -i: interrupt rebase when "commit --amend" failed during "reword"
"commit --amend" could fail in cases like the user empties the commit message, or pre-commit failed. When it fails, rebase should be interrupted and alert the user, rather than ignoring the error and continue on rebasing. This also gives users a way to gracefully interrupt a "reword" if they decided they actually want to do an "edit", or even "rebase --abort". 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
1e501a7c47
commit
0becb3e4b9
@ -143,6 +143,21 @@ die_with_patch () {
|
|||||||
die "$2"
|
die "$2"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exit_with_patch () {
|
||||||
|
echo "$1" > "$state_dir"/stopped-sha
|
||||||
|
make_patch $1
|
||||||
|
git rev-parse --verify HEAD > "$amend"
|
||||||
|
warn "You can amend the commit now, with"
|
||||||
|
warn
|
||||||
|
warn " git commit --amend"
|
||||||
|
warn
|
||||||
|
warn "Once you are satisfied with your changes, run"
|
||||||
|
warn
|
||||||
|
warn " git rebase --continue"
|
||||||
|
warn
|
||||||
|
exit $2
|
||||||
|
}
|
||||||
|
|
||||||
die_abort () {
|
die_abort () {
|
||||||
rm -rf "$state_dir"
|
rm -rf "$state_dir"
|
||||||
die "$1"
|
die "$1"
|
||||||
@ -395,7 +410,13 @@ do_next () {
|
|||||||
mark_action_done
|
mark_action_done
|
||||||
pick_one $sha1 ||
|
pick_one $sha1 ||
|
||||||
die_with_patch $sha1 "Could not apply $sha1... $rest"
|
die_with_patch $sha1 "Could not apply $sha1... $rest"
|
||||||
git commit --amend --no-post-rewrite
|
git commit --amend --no-post-rewrite || {
|
||||||
|
warn "Could not amend commit after successfully picking $sha1... $rest"
|
||||||
|
warn "This is most likely due to an empty commit message, or the pre-commit hook"
|
||||||
|
warn "failed. If the pre-commit hook failed, you may need to resolve the issue before"
|
||||||
|
warn "you are able to reword the commit."
|
||||||
|
exit_with_patch $sha1 1
|
||||||
|
}
|
||||||
record_in_rewritten $sha1
|
record_in_rewritten $sha1
|
||||||
;;
|
;;
|
||||||
edit|e)
|
edit|e)
|
||||||
@ -404,19 +425,8 @@ do_next () {
|
|||||||
mark_action_done
|
mark_action_done
|
||||||
pick_one $sha1 ||
|
pick_one $sha1 ||
|
||||||
die_with_patch $sha1 "Could not apply $sha1... $rest"
|
die_with_patch $sha1 "Could not apply $sha1... $rest"
|
||||||
echo "$sha1" > "$state_dir"/stopped-sha
|
|
||||||
make_patch $sha1
|
|
||||||
git rev-parse --verify HEAD > "$amend"
|
|
||||||
warn "Stopped at $sha1... $rest"
|
warn "Stopped at $sha1... $rest"
|
||||||
warn "You can amend the commit now, with"
|
exit_with_patch $sha1 0
|
||||||
warn
|
|
||||||
warn " git commit --amend"
|
|
||||||
warn
|
|
||||||
warn "Once you are satisfied with your changes, run"
|
|
||||||
warn
|
|
||||||
warn " git rebase --continue"
|
|
||||||
warn
|
|
||||||
exit 0
|
|
||||||
;;
|
;;
|
||||||
squash|s|fixup|f)
|
squash|s|fixup|f)
|
||||||
case "$command" in
|
case "$command" in
|
||||||
|
Loading…
Reference in New Issue
Block a user