Code

commit: allow --amend to reuse message from another commit
authorJunio C Hamano <gitster@pobox.com>
Fri, 14 Dec 2007 19:57:22 +0000 (11:57 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 14 Dec 2007 23:39:54 +0000 (15:39 -0800)
After tentatively applying a patch from a contributor, you can get a
replacement patch with corrected code and unusable commit log message.
In such a case, this sequence ought to give you an editor based on the
message in the earlier commit, to let you describe an incremental
improvement:

    git reset --hard HEAD^ ;# discard the earlier one
    git am <corrected-patch
    git commit --amend -c HEAD@{1}

Unfortunately, --amend insisted reusing the message from the commit
being amended, ignoring the -c option.  This corrects it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-commit.c
t/t7501-commit.sh

index ad9f9211b39af6cc7d1f319b6a8da7c514a33f12..518ebe0347e631c72f4e2a83b948259ee20fd213 100644 (file)
@@ -537,7 +537,7 @@ static int parse_and_validate_options(int argc, const char *argv[],
                die("Option -m cannot be combined with -c/-C/-F.");
        if (edit_message)
                use_message = edit_message;
-       if (amend)
+       if (amend && !use_message)
                use_message = "HEAD";
        if (use_message) {
                unsigned char sha1[20];
index 05aa97d6f3d3a87d94004b9f9f4394d8e35175f6..d1a415a12624f4a116a9001bad48c34420671280 100755 (executable)
@@ -310,4 +310,21 @@ test_expect_success 'same tree (merge and amend merge)' '
 
 '
 
+test_expect_success 'amend using the message from another commit' '
+
+       git reset --hard &&
+       test_tick &&
+       git commit --allow-empty -m "old commit" &&
+       old=$(git rev-parse --verify HEAD) &&
+       test_tick &&
+       git commit --allow-empty -m "new commit" &&
+       new=$(git rev-parse --verify HEAD) &&
+       test_tick &&
+       git commit --allow-empty --amend -C "$old" &&
+       git show --pretty="format:%ad %s" "$old" >expected &&
+       git show --pretty="format:%ad %s" HEAD >actual &&
+       diff -u expected actual
+
+'
+
 test_done