public inbox for git@vger.kernel.org 
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail•com>
To: Simon Cheng <cyqsimon@gmail•com>, phillip.wood@dunelm•org.uk
Cc: git@vger•kernel.org, Johannes Schindelin <johannes.schindelin@gmx•de>
Subject: Re: [Bug] commit cleanup does not happen during autosquash rebase
Date: Thu, 18 Sep 2025 16:12:55 +0100	[thread overview]
Message-ID: <ff67849a-74d5-4a3a-bfee-de261aa66ca3@gmail.com> (raw)
In-Reply-To: <CA+itcS2Knde3K_JuVru6_s=Eh0rPBPi1aa1=y0_wyA-=A7CXsQ@mail.gmail.com>

On 15/09/2025 10:03, Simon Cheng wrote:
> Resending because I accidentally used HTML mode.
> 
> Thanks Phillip,
> 
> Sorry for replying so late. I forgot to set up notifications for this
> email address, so I had basically completely forgotten about this
> matter.

You're reply turned out to be timely as I was thinking about this bug 
just before I read it on Monday. I've sent a patch which you should be 
Cc'd on. For anyone following the discussion on the list it is available 
at 
https://lore.kernel.org/git/cover.1758186038.git.phillip.wood@dunelm.org.uk/

> Yes I fully agree with your proposed approach. Also it's probably a
> good idea to update the `git-config(1)` man page to document all the
> commands affected by `commit.cleanup`.

That's a good idea but it will mean a little bit of work to audit how 
commands are affected by that config setting.

Thanks

Phillip

> Cheers,
> 
> Simon
> 
> 
> On Mon, 18 Aug 2025 at 23:14, Phillip Wood <phillip.wood123@gmail•com> wrote:
>>
>> Hi Simon
>>
>> On 13/08/2025 12:39, Simon Cheng wrote:
>>>
>>> What did you do before the bug happened? (Steps to reproduce your issue)
>>>
>>> 1. Initialize a git repo with `git init`
>>> 2. Install a custom `prepare-commit-msg` hook that injects some comments
>>>     - Intention: inject the output of `git log --oneline -n10` during
>>> interactive commit, so I can see past commits
>>> 3. Run `git config commit.cleanup strip`
>>>     - Intention: strip the injected comments too in non-interactive mode
>>> (e.g. `git cherry-pick` & `git rebase`)
>>> 4. Run `touch foo && git add -A && git commit -m "Initial commit"`
>>> 5. Run `touch bar && git add -A && git commit --fixup=@`
>>> 6. Run `git rebase --root --autosquash`
>>
>> Thanks for providing a simple way to reproduce this
>>
>>> What did you expect to happen? (Expected behavior)
>>>
>>> Git would perform the autosquash, while keeping the commit message of
>>> the squash target unchanged.
>>>
>>> What happened instead? (Actual behavior)
>>>
>>> Git performed the autosquash, but the commit message of the squash
>>> target is now clobbered with my injected comments.
>>
>> It looks like this stems from f7d42ceec52 (rebase -i: do leave commit
>> message intact in fixup! chains, 2021-01-28) which was added in response
>> to a bug report[1]. That commit switched from always cleaning up the
>> fixup message to never cleaning it up. I wonder if instead we should be
>> respecting the user's commit.cleanup setting. The commit message says
>> that should not respect commit.cleanup because we want to use the
>> message verbatim but that is not what we do with "pick" commands which
>> respect commit.cleanup if it is set. Given that we call the
>> prepare-commit-msg hook we cannot be sure that we're reusing the
>> original commit message verbatim anyway so I think we should probably
>> change "fixup" commands to use the same cleanup flags as "pick" commands.
>>
>> I'm going to be off the list for a week from tomorrow but I'll try and
>> look at this again when I'm back if no one else has picked it up in the
>> meantime.
>>
>> Thanks
>>
>> Phillip
>>
>> [1]
>> https://lore.kernel.org/git/CANVGpwZGbzYLMeMze64e_OU9p3bjyEgzC5thmNBr6LttBt+YGw@mail.gmail.com/
>>
>>> What's different between what you expected and what actually happened?
>>>
>>> I expected commit cleanup to happen during the autosquash. It seems
>>> like that didn't happen.
>>>
>>> Anything else you want to add:
>>>
>>> Here is my `prepare-commit-msg` script. But I expect this issue to be
>>> replicable with anything that injects comments.
>>>
>>> ```
>>> #!/usr/bin/env bash
>>> {
>>>     echo '# Last 10 commits:'
>>>     git log --oneline -n 10 --decorate=short | sed 's/^/#   /'
>>>     echo '#'
>>> } >> "$1"
>>> ```
>>>
>>> Please review the rest of the bug report below.
>>> You can delete any lines you don't wish to share.
>>>
>>>
>>> [System Info]
>>> git version:
>>> git version 2.50.1
>>> cpu: x86_64
>>> built from commit: d82adb61ba2fd11d8f2587fca1b6bd7925ce4044
>>> sizeof-long: 8
>>> sizeof-size_t: 8
>>> shell-path: /bin/sh
>>> libcurl: 8.14.1
>>> OpenSSL: OpenSSL 3.5.1 1 Jul 2025
>>> zlib-ng: 2.2.4
>>> SHA-1: SHA1_DC
>>> SHA-256: SHA256_BLK
>>> uname: Linux 6.12.41-1-lts #1 SMP PREEMPT_DYNAMIC Fri, 01 Aug 2025
>>> 20:42:03 +0000 x86_64
>>> compiler info: gnuc: 15.1
>>> libc info: glibc: 2.42
>>> $SHELL (typically, interactive shell): /bin/bash
>>>
>>>
>>> [Enabled Hooks]
>>> prepare-commit-msg
>>>
>>


      reply	other threads:[~2025-09-18 15:12 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-13 11:39 [Bug] commit cleanup does not happen during autosquash rebase Simon Cheng
2025-08-18 15:14 ` Phillip Wood
2025-09-15  9:03   ` Simon Cheng
2025-09-18 15:12     ` Phillip Wood [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ff67849a-74d5-4a3a-bfee-de261aa66ca3@gmail.com \
    --to=phillip.wood123@gmail$(echo .)com \
    --cc=cyqsimon@gmail$(echo .)com \
    --cc=git@vger$(echo .)kernel.org \
    --cc=johannes.schindelin@gmx$(echo .)de \
    --cc=phillip.wood@dunelm$(echo .)org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox