threads / bug / 55899

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

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

## tl;dr

4 messages between Jun 10, 2021 and Jun 10, 2021.

replies: 3people: 2as markdown or json

Nikita Bobko· Jun 10, 2021, 15:04 UTC · lore
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· Jun 10, 2021, 15:11 UTC · re: Nikita Bobko · lore

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

On Thu, Jun 10, 2021 at 05:04:58PM +0200, Nikita Bobko wrote:
Show 13 quoted lines
> 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· Jun 10, 2021, 15:36 UTC · re: Jeff King · lore

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

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:
Show 21 quoted lines
>
> 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· Jun 10, 2021, 16:29 UTC · re: Nikita Bobko · lore

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

On Thu, Jun 10, 2021 at 05:36:43PM +0200, Nikita Bobko wrote:
Show 6 quoted lines
> 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

← back to recent threads