Fix git-rebase -i to allow squashing of fast-forwardable commits
[gitweb.git] / git-rebase--interactive.sh
index ac4d559f07ed656ff08f75a00c028bb515f7a8af..f3950767ea6256cd9c2dceabbe7c91fa62e3f3aa 100755 (executable)
@@ -84,6 +84,7 @@ pick_one () {
        current_sha1=$(git rev-parse --verify HEAD)
        if [ $current_sha1 = $parent_sha1 ]; then
                git reset --hard $sha1
+               test "a$1" = a-n && git reset --soft $current_sha1
                sha1=$(git rev-parse --short $sha1)
                warn Fast forward to $sha1
        else
@@ -193,14 +194,14 @@ do_next () {
                        die "Cannot 'squash' without a previous commit"
 
                mark_action_done
-               failed=f
-               pick_one -n $sha1 || failed=t
                MSG="$DOTEST"/message
                echo "# This is a combination of two commits." > "$MSG"
                echo "# The first commit's message is:" >> "$MSG"
                echo >> "$MSG"
                git cat-file commit HEAD | sed -e '1,/^$/d' >> "$MSG"
                echo >> "$MSG"
+               failed=f
+               pick_one -n $sha1 || failed=t
                echo "# And this is the 2nd commit message:" >> "$MSG"
                echo >> "$MSG"
                git cat-file commit $sha1 | sed -e '1,/^$/d' >> "$MSG"
@@ -401,6 +402,9 @@ do
 #  pick = use commit
 #  edit = use commit, but stop for amending
 #  squash = use commit, but meld into previous commit
+#
+# If you remove a line here THAT COMMIT WILL BE LOST.
+#
 EOF
                git rev-list $MERGES_OPTION --pretty=oneline --abbrev-commit \
                        --abbrev=7 --reverse $UPSTREAM..$HEAD | \