Re: [PATCH v2 2/2] templates: detect commit messages containing diffs
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Feb 14, 2026, 14:36 UTC
- Message-ID
- <20ed1f26-f60b-4e30-a0a5-8bd01dee19d1@gmail.com>
- In-Reply-To
- <xmqqfr74msm9.fsf@gitster.g>
On 13/02/2026 17:59, Junio C Hamano wrote:
Show 25 quoted lines
> Phillip Wood <phillip.wood123@gmail.com> writes: > >> From: Phillip Wood <phillip.wood@dunelm.org.uk> >> >> 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)
Show 11 quoted lines
>> 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