# [Bug report] git format-patch + git am doesn't preserve original commit message

4 messages from 2021-06-10 to 2021-06-10. Participants: Nikita Bobko, Jeff King.
Thread: https://gitlist.dev/t/55899

## Nikita Bobko, 2021-06-10 15:04

Subject: [Bug report] git format-patch + git am doesn't preserve original commit message
Message-ID: <CAMJzOtzu-fKxtseSPQ8riTC-kfg1CphnXN=EN-rnxVo85dZvFw@mail.gmail.com>
URL: https://gitlist.dev/e/CAMJzOtzu-fKxtseSPQ8riTC-kfg1CphnXN%3DEN-rnxVo85dZvFw%40mail.gmail.com

```
Steps to reproduce:
ˋˋˋ
git init
git commit --allow-empty -m 'root'
echo foo > foo
git add .
git commit -m '[tag] foo'
git checkout @~
git format-patch master~..master
cat 0001-tag-foo.patch | git am
ˋˋˋ
Expected: commit message generated by `git am` is `[tag] foo`
Actual: commit message generated by `git am` is `foo`

[System Info]
git version:
git version 2.31.1
cpu: x86_64
no commit associated with this build
sizeof-long: 8
sizeof-size_t: 8
shell-path: /bin/sh
uname: Linux 5.4.98-1-lts #1 SMP Sat, 13 Feb 2021 19:22:14 +0000 x86_64
compiler info: gnuc: 10.2
libc info: glibc: 2.33
$SHELL (typically, interactive shell): /bin/zsh


[Enabled Hooks]

```

## Jeff King, 2021-06-10 15:11

Subject: Re: [Bug report] git format-patch + git am doesn't preserve original commit message
Message-ID: <YMIrkBiCpUXcUwsW@coredump.intra.peff.net>
URL: https://gitlist.dev/e/YMIrkBiCpUXcUwsW%40coredump.intra.peff.net
In-Reply-To: <CAMJzOtzu-fKxtseSPQ8riTC-kfg1CphnXN=EN-rnxVo85dZvFw@mail.gmail.com>

```
On Thu, Jun 10, 2021 at 05:04:58PM +0200, Nikita Bobko wrote:

> Steps to reproduce:
> ˋˋˋ
> git init
> git commit --allow-empty -m 'root'
> echo foo > foo
> git add .
> git commit -m '[tag] foo'
> git checkout @~
> git format-patch master~..master
> cat 0001-tag-foo.patch | git am
> ˋˋˋ
> Expected: commit message generated by `git am` is `[tag] foo`
> Actual: commit message generated by `git am` is `foo`

This is working as intended. See the "-k" option of git-am and
git-mailinfo (and also "-b" for mailinfo).

-Peff

```

## Nikita Bobko, 2021-06-10 15:36

Subject: Re: [Bug report] git format-patch + git am doesn't preserve original commit message
Message-ID: <CAMJzOtx9D7KthsUi7eLcmz7rszOQh8t=-VhXeOGDX1CMV1iERQ@mail.gmail.com>
URL: https://gitlist.dev/e/CAMJzOtx9D7KthsUi7eLcmz7rszOQh8t%3D-VhXeOGDX1CMV1iERQ%40mail.gmail.com
In-Reply-To: <YMIrkBiCpUXcUwsW@coredump.intra.peff.net>

```
Oh, I see, thank you, it works.

But actually, I am not sure that it's "expected" behavior. I would
expect git to preserve original message by default without any
additional flags. Shouldn't `--keep-non-patch` flag in `git am` be
enabled by default then?

On Thu, Jun 10, 2021 at 5:11 PM Jeff King <peff@peff.net> wrote:
>
> On Thu, Jun 10, 2021 at 05:04:58PM +0200, Nikita Bobko wrote:
>
> > Steps to reproduce:
> > ˋˋˋ
> > git init
> > git commit --allow-empty -m 'root'
> > echo foo > foo
> > git add .
> > git commit -m '[tag] foo'
> > git checkout @~
> > git format-patch master~..master
> > cat 0001-tag-foo.patch | git am
> > ˋˋˋ
> > Expected: commit message generated by `git am` is `[tag] foo`
> > Actual: commit message generated by `git am` is `foo`
>
> This is working as intended. See the "-k" option of git-am and
> git-mailinfo (and also "-b" for mailinfo).
>
> -Peff

```

## Jeff King, 2021-06-10 16:29

Subject: Re: [Bug report] git format-patch + git am doesn't preserve original commit message
Message-ID: <YMI99TBbZ1zCFE1V@coredump.intra.peff.net>
URL: https://gitlist.dev/e/YMI99TBbZ1zCFE1V%40coredump.intra.peff.net
In-Reply-To: <CAMJzOtx9D7KthsUi7eLcmz7rszOQh8t=-VhXeOGDX1CMV1iERQ@mail.gmail.com>

```
On Thu, Jun 10, 2021 at 05:36:43PM +0200, Nikita Bobko wrote:

> Oh, I see, thank you, it works.
> 
> But actually, I am not sure that it's "expected" behavior. I would
> expect git to preserve original message by default without any
> additional flags. Shouldn't `--keep-non-patch` flag in `git am` be
> enabled by default then?

I'd be hesitant to change that, since it would break any communities
using other tags. I think 17635fc900 (mailinfo: -b option keeps
[bracketed] strings that is not a [PATCH] marker, 2009-07-15) has some
examples.

In your example, I think passing "-k" to both git-format-patch and
git-am is the right solution. But presumably that's a toy example. In
the real world, the person running "am" is probably not the same as the
one running format-patch (and if it is, probably something like
cherry-pick is a better solution anyway).

-Peff

```
