Search code examples
gitpatchgit-commitformat-patch

git format-patch on empty commit returns unexpected result


Couldn't find any explanation on git docs on this issue:

If I create a dummy commit, with some dummy diff, I get a normal patch when I run

git format-patch -1 -o outgoing/ -p -k

but if the last commit is an empty commit, generated by

git commit --allow-empty "Some commit message"

then the output of the format patch will be an empty patch. If the first case produces something like this:

From 08cfdb2994554d834b89309ca96d9bf513e26a90 Mon Sep 17 00:00:00 2001
From: User <[email protected]>
Date: Fri, 8 Jan 2016 12:44:57 +0000
Subject: dummy commit


diff --git a/lol.txt b/lol.txt
new file mode 100644
index 0000000..f944b38
--- /dev/null
+++ b/lol.txt
@@ -0,0 +1 @@
+:)
--
2.5.4 (Apple Git-61)

then the second case shouldn't generate something like this instead ?

From 2d486f25c48780e2e132047e681929fcccb7e60c Mon Sep 17 00:00:00 2001
From: User <[email protected]>
Date: Fri Jan 8 12:43:55 2016 +0000
Subject: Some commit message


2.5.4 (Apple Git-61)

Solution

  • Extracted from git mailing list:

    Jeff King said:

    I'm not sure if this is a bug or not.
    
    In the beginning, git's revision-traversal machinery generally does not show 
    commits which have no diff. Over the years, commands like "git log"
    learned to set the "always_show_header" option to show even empty commits. 
    But format-patch never did.
    

    And then Junio C Hamano added:

    The patch based workflow support is geared towards helping the recipient 
    of the patches a lot more than the contributors, and to prevent mistakes while 
    applying the patches, "am" would stop when it sees such an empty e-mail as you saw 
    (in the later part of message I am not quoting). After all, a "format-patch" output 
    that does not have any patch would be indistinguishable from discussion e-mail 
    messages and the recipient would not want to end up with no-op commits 
    that record such messages.
    
    So I think skipping no-op commit from the output was done pretty much deliberately 
    and it is definitely not a bug.  I however do not think it is incorrect 
    to say that it is a lack of feature that nobody 
    so far found necessary or beneficial.
    
    I would not refuse to consider adding a new option to "format-patch" 
    to emit such a no-op message, and add a "having no patch is OK, just record a 
    no-op commit" option to "am", though.  But I do not see a clear benefit from 
    such change--it sounds more like a set of"because we could" not 
    "because we need to" changes to me.
    

    thread available at http://git.661346.n2.nabble.com/git-format-patch-on-empty-commit-td7645342.html thanks to @VonC for finding it