Subject: Re: [PATCH] doc: add caveat about roundtripping format-patch

From: Junio C Hamano <[email-masked]>
Date: Sat, 07 Feb 2026 17:39:11 -0800

[email-masked] writes:

> From: Kristoffer Haugsbakk <[email-masked]>
>
> git-format-patch(1), git-send-email(1), and git-am(1) deal with
> formatting commits as patches, sending them (perhaps directly), and
> applying them, respectively. Naturally they use a few delimiters to mark
> where the commit message ends. This can lead to surprising behavior when
> these delimiters are used in the commit message itself.
>
> git-format-patch(1) and git-send-email(1) will accept any commit message
> and not warn or error about these delimiters being used.[1]
>
> Moreover, the presence of unindented diffs in the commit message will
> cause git-am(1) to apply both the diffs from the commit message as well
> as the patch section.[2]
>
> It is unclear whether any commands in this chain will learn to warn
> about this. One concern could be that users have learned to rely on
> the three-dash line rule to conveniently add extra-commit message
> information in the commit message, knowing that git-am(1) will
> ignore it.[4]
>
> All of this is covered already, technically, However, we should spell
> out the implications.
>
> † 1: There is also git-commit(1) to consider. However, making that
>      command warn or error out over such delimiters would be disruptive
>      to all Git users who never use email in their workflow.
> [2]: Recently patch(1) caused this issue for a project, but it was noted
>      that git-am(1) has the same behavior[3]
> [3]: https://github.com/i3/i3/pull/6564#issuecomment-3858381425
> [4]: https://lore.kernel.org/git/[email-masked]/
>
> Reported-by: Matthias Beyer <[email-masked]>
> Reported-by: Christoph Anton Mitterer <[email-masked]>
> Reported-by: Matheus Tavares <[email-masked]>
> Reported-by: Chris Packham <[email-masked]>
> Helped-by: Jakob Haufe <[email-masked]>
> Signed-off-by: Kristoffer Haugsbakk <[email-masked]>
> ---
>
> Notes (series):
>     There might be other things to do here. Mention it in gitfaq(5)?
>     
>     § Trailers
>     
>     • Reported-by: Matthias Beyer <[email-masked]>
>       • From this thread
>     Reported-by: Christoph Anton Mitterer <[email-masked]>
>       • From https://lore.kernel.org/git/[email-masked]/T/#u
>     Reported-by: Matheus Tavares <[email-masked]>
>       • From https://lore.kernel.org/git/d0b5778251[email-masked]/#t
>     Reported-by: Chris Packham <[email-masked]>
>       • From https://lore.kernel.org/git/CAFOYHZC6Qd9wkoWPcTJDxAs9u=[email-masked]/
>     
>     (These were all linked in https://lore.kernel.org/git/[email-masked]/ )
>     
>     Helped-by: Jakob Haufe <[email-masked]>
>       • For the part about patch(1): https://lore.kernel.org/git/[email-masked]/T/#mc389dbd2ae02a007cbe57cd16ca4790ecc5a84f7

The space after three-dash line is to give additional information to
help readers, but the above does not qualify as one.

> +Furthermore, the presence of an unindented diff in the commit message
> +will not only cut the message short but cause that very diff to be
> +applied, along with the patch in the patch section.

A line that matches "^diff " is taken as the end of the log message,
and everything that follows is passed to the patch application
machinery, and the above description is a consequence of that.  If
you have more than one such diff, they may be either applied, or
some of them may not match the patch target and the whole thing may
be rejected.  Neither is a happy outcome.

Queued.  Thanks.