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:

committed by
Junio C Hamano

parent
163f392590
commit
0205e72f08
@ -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.
|
||||
|
Reference in New Issue
Block a user