From: Phillip Wood Date: Sat, 14 Feb 2026 14:36:39 GMT Subject: Re: [PATCH v2 2/2] templates: detect commit messages containing diffs Message-ID: <20ed1f26-f60b-4e30-a0a5-8bd01dee19d1@gmail.com> In-Reply-To: On 13/02/2026 17:59, Junio C Hamano wrote: > Phillip Wood writes: > >> From: Phillip Wood >> >> 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) >> 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