diff options
author | Michael Haggerty <mhagger@alum.mit.edu> | 2009-12-07 10:20:59 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-12-07 13:50:57 -0800 |
commit | 0205e72f088322a70a77643a7cd2d8b23ee07e14 (patch) | |
tree | 4d723fafa7ea1bc3f27c6210939d1ae8162fa137 /git-rebase--interactive.sh | |
parent | 163f3925902446735b2f631dc44ab67882a93024 (diff) | |
download | git-0205e72f088322a70a77643a7cd2d8b23ee07e14.tar.gz |
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>
Diffstat (limited to 'git-rebase--interactive.sh')
-rwxr-xr-x | git-rebase--interactive.sh | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 0bd3bf78b8..30de96ee1a 100755 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -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. |