Add a command "fixup" to rebase --interactive

The command is like "squash", except that it discards the commit message
of the corresponding commit.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael Haggerty
2009-12-07 10:20:59 +01:00
committed by Junio C Hamano
parent 163f392590
commit 0205e72f08
4 changed files with 77 additions and 18 deletions

View File

@ -302,7 +302,10 @@ nth_string () {
make_squash_message () {
if test -f "$SQUASH_MSG"; then
COUNT=$(($(sed -n "s/^# This is [^0-9]*\([1-9][0-9]*\).*/\1/p" \
# We want to be careful about matching only the commit
# message comment lines generated by this function.
# "[snrt][tdh]" matches the nth_string endings.
COUNT=$(($(sed -n "s/^# Th[^0-9]*\([1-9][0-9]*\)[snrt][tdh] commit message.*:/\1/p" \
< "$SQUASH_MSG" | sed -ne '$p')+1))
echo "# This is a combination of $COUNT commits."
sed -e 1d -e '2,/^./{
@ -315,10 +318,23 @@ make_squash_message () {
echo
git cat-file commit HEAD | sed -e '1,/^$/d'
fi
echo
echo "# This is the $(nth_string $COUNT) commit message:"
echo
git cat-file commit $1 | sed -e '1,/^$/d'
case $1 in
squash)
echo
echo "# This is the $(nth_string $COUNT) commit message:"
echo
git cat-file commit $2 | sed -e '1,/^$/d'
;;
fixup)
echo
echo "# The $(nth_string $COUNT) commit message will be skipped:"
echo
# Comment the lines of the commit message out using
# "# " rather than "# " to make them less likely to
# confuse the sed regexp above.
git cat-file commit $2 | sed -e '1,/^$/d' -e 's/^/# /'
;;
esac
}
peek_next_command () {
@ -367,20 +383,28 @@ do_next () {
warn
exit 0
;;
squash|s)
comment_for_reflog squash
squash|s|fixup|f)
case "$command" in
squash|s)
squash_style=squash
;;
fixup|f)
squash_style=fixup
;;
esac
comment_for_reflog $squash_style
test -f "$DONE" && has_action "$DONE" ||
die "Cannot 'squash' without a previous commit"
die "Cannot '$squash_style' without a previous commit"
mark_action_done
make_squash_message $sha1 > "$MSG"
make_squash_message $squash_style $sha1 > "$MSG"
failed=f
author_script=$(get_author_ident_from_commit HEAD)
output git reset --soft HEAD^
pick_one -n $sha1 || failed=t
case "$(peek_next_command)" in
squash|s)
squash|s|fixup|f)
USE_OUTPUT=output
MSG_OPT=-F
EDIT_OR_FILE="$MSG"
@ -768,6 +792,7 @@ first and then run 'git rebase --continue' again."
# 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
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.