Volume XXII, number 279Tuesday, October 6, 2026Latest message 52 minutes ago

The Git List

News and archive of git@vger.kernel.org, since April 2005

Inconsistency in commit message handling

1 messages between Sep 2, 2026 and Sep 2, 2026, from Simon Cheng.

Plain Markdown or JSON for tools and agents.

Simon ChengSep 2, 2026, 14:04 UTC on lore

When creating a normal commit using `git commit -m MSG`, an additional `\n` is appended to the end of `MSG` before going through cleanup. However when creating a merge commit using `git merge --no-ff -m MSG BRANCH`, this additional `\n` appears to be missing.

Under default configuration this has no impact because `commit.cleanup = default` is equivalent to `commit.cleanup = whitespace` when non-interactive. Therefore the additional `\n` simply gets cleaned up and nothing happens.

However in my case it does cause some trouble. I use the `prepare-commit-msg` hook to inject some comments into my editor to help me write during interactive commits. This is the hook, with all irrelevant fluff removed:

``` #!/usr/bin/env bash COMMIT_MSG_FILE=$1 echo "# My additional comments" >> "$COMMIT_MSG_FILE" ```

I also set `commit.cleanup = strip` so that these comments also get cleaned up for non-interactive commits.

And this works for normal commits interactive, normal commits non-interactive, merge commits interactive, but NOT merge commits non-interactive. Since `git merge --no-ff -m MSG BRANCH` does not append a `\n`, these comments actually clobber merge commits. `git merge --no-ff -m "Merge message" BRANCH` ends up having a message like this: "Merge message# My additional comments".

I hesitate to call this a bug because arguably it's just some behaviour quirks that my hook script should handle. But I think it is fair to call this inconsistent, and it creates surprises for the user as it did for me. I would prefer that `git merge` adds this `\n` too.

---
What did you do before the bug happened? (Steps to reproduce your issue)
1. Add the aforementioned `prepare-commit-msg` hook.
2. Set `commit.cleanup = strip`.
3. Run `git merge --no-ff -m "Merge message" BRANCH`.
4. Run `git show`
What did you expect to happen? (Expected behavior)
The merge commit has message "Merge message".
What happened instead? (Actual behavior)
The merge commit has message "Merge message# My additional comments".
What's different between what you expected and what actually happened?

My injected comments did not appear on a new line, and hence failed to get cleaned up.

[System Info]
git version:
git version 2.55.0
cpu: x86_64
built from commit: e9019fcafe0040228b8631c30f97ae1adb61bcdc
sizeof-long: 8
sizeof-size_t: 8
shell-path: /bin/sh
rust: enabled
feature: fsmonitor--daemon
gettext: enabled
libcurl: 8.21.0
OpenSSL: OpenSSL 3.6.3 9 Jun 2026
zlib-ng: 2.3.3
SHA-1: SHA1_DC
SHA-256: SHA256_BLK
default-ref-format: files
default-hash: sha1
uname: Linux 6.18.48-1-lts #1 SMP PREEMPT_DYNAMIC Fri, 28 Aug 2026
11:47:30 +0000 x86_64
compiler info: gnuc: 16.1
libc info: glibc: 2.44
$SHELL (typically, interactive shell): /usr/bin/bash

[Enabled Hooks] prepare-commit-msg

Back to recent threads