From: Kristoffer Haugsbakk Date: Fri, 13 Feb 2026 16:42:41 GMT Subject: Re: [PATCH v2 2/2] templates: detect commit messages containing diffs Message-ID: <7bf9cdde-de61-46fd-8730-592f87017a19@app.fastmail.com> In-Reply-To: <494f4df6865f81eba42584ead81327c9a305d0d4.1770993281.git.phillip.wood@dunelm.org.uk> On Fri, Feb 13, 2026, at 15:34, Phillip Wood wrote: > 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. > > Detecting if the message contains a diff is complicated by the > hook being passed the message before it is cleaned up so we need to > ignore any diffs below the scissors line. There are also two possible > config keys to check to find the comment character at the start of > the scissors line. The first paragraph of the commit message becomes > the email subject header which beings "Subject: " and so does not > need to be checked. The trailing ".*" when matching commented lines > ensures that if the comment string ends with a "$" it is not treated > as an anchor. > > [1] > https://lore.kernel.org/git/bcqvh7ahjjgzpgxwnr4kh3hfkksfruf54refyry3ha7qk7dldf@fij5calmscvm > [2] > https://lore.kernel.org/git/ca13705ae4817ffba16f97530637411b59c9eb19.camel@scientia.org/ > [3] > https://lore.kernel.org/git/d0b577825124ac684ab304d3a1395f3d2d0708e8.1662333027.git.matheus.bernardino@usp.br/ > [4] > https://lore.kernel.org/git/CAFOYHZC6Qd9wkoWPcTJDxAs9u=FGpHQTkjE-guhwkya0DRVA6g@mail.gmail.com/ > > Signed-off-by: Phillip Wood > --- > templates/hooks/commit-msg.sample | 54 +++++++++++++++++++++++++++++-- > 1 file changed, 52 insertions(+), 2 deletions(-) >[snip] This works for me with `git commit --cleanup=scissors --verbose`.