Re: [PATCH v2 2/2] templates: detect commit messages containing diffs
From: Phillip Wood <hidden>
Date: 2026-02-14 14:36:42
On 13/02/2026 17:59, Junio C Hamano wrote:
Phillip Wood [off-list ref] writes:quoted
From: Phillip Wood <redacted> If the body of a commit message contains a diff that is not indented then "git am" will treat that diff as part of the patch rather than as part of the commit message. This allows it to apply email messages that were created by adding a commit message in front of a regular diff without adding the "---" separator used by "git format-patch". This often surprises users [1-4] so add a check to the sample "commit-msg" hook to reject messages that would confuse "git am". Even if a project does not use an email based workflow it is not uncommon for people to generate patches from it and apply them with "git am". Therefore it is still worth discouraging the creation of commit messages that would not be applied correctly. A further source of confusion when applying patches with "git am" is the "---" separator that is added by "git format patch". If a commit message body contains that line then it will be truncated by "git am". As this is often used by patch authors to add some commentary that they do not want to end up in the commit message when the patch is applied, the hook does not complain about the presence of "---" lines in the message."git format match" -> "git format-patch".
Thanks (I was confused for a minute because it says "format patch" above not "format match" but you're pointing out that it should be hypenated)
quoted
The trailing ".*" when matching commented lines ensures that if the comment string ends with a "$" it is not treated as an anchor.I am not sure what this means. Wouldn't these three sed -e '/^#/d' sed -e '/^#.*/d' sed -e '/^#.*$/d' work exactly the same way?
They do, but if the comment string is '$' then these two sed -e '/^$/d' sed -e '/^$.*/d' have different meanings Thanks Phillip