git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/6] commit: add amend suboption to --fixup to create amend! commit

From
Charvi Mendiratta <charvi077@gmail.com>
Date
Feb 21, 2021, 06:35 UTC
Message-ID
<CAPSFM5cRq9OfxypwTAsv3OFpTPM88e4_agTmFEGbaVyLi6Qbig@mail.gmail.com>
In-Reply-To
<xmqq4ki7bf9y.fsf@gitster.g>
Hi,
On Sat, 20 Feb 2021 at 08:46, Junio C Hamano <gitster@pobox.com> wrote:
Show 28 quoted lines
>
> Charvi Mendiratta <charvi077@gmail.com> writes:
>
> > For end-users "-m" or "-F" will make it easier to prepare an "amend!"
> > commit. Because using the "-m" reduces the cost of opening an editor
> > to prepare "amend!" commit and it can be done with command line only.
>
> Hmph.  That is not very convicing to me.  The user is motivated
> enough to fix a wrong commit log message and replace it with an
> improved one by using the "--fixup:amend" feature---why would that
> improved message can sufficiently be written with just an "-m
> message", which by definition would be much less capable of
> preparing a well-thought-out message than with an editor?
>
> Yes, with "-m", you can add some short string easily at the end of
> the existing commit message without opening an editor.  But I am
> trying to see why it is a good thing to be able to do so in the
> first place.  It is very easy to make typoes while doing so and it
> would be hard to fix these typoes, exactly because you are doing so
> without being in an editor.  And the whole point of --fixup=amend is
> about improving the message (as opposed to --fixup that is to record
> the contents that have already been improved in the index).
>
> This is why I kept asking what the use case would look like.  I am
> trying to find out if you have a good end-user story in mind that we
> can use in the documentation to sell the feature to end-users, but I
> am not seeing one.
>

I was in my mind that, as we can easily prepare the commit using `git commit -m "commit message"`. Similarly, we can extend this working with `git commit --fixup=amend:<commit> -m "new commit message"`. And the difference is that in the later one the goal of changing the commit message will be achieved after `git rebase --autosquash` i.e the later command works with sequencer. This will easily allow us to write a new message for the commit we are fixing up through the command line only similar to `git commit -m` and if we need to fixup the commit msg then it can be done without `-m` and the editor gets open with a seeded commit message we want to fixup. Also the same working applies to `reword` option also and may allow to reword the commit msg from command line only.

But I am still doubtful, as I agree with above that the main concern is to only fixup the wrong commit message and in that case the "-m" option can't be that much productive or maybe confusing for users.

Show 20 quoted lines
> Is the combination of "--fixup=amend" and "-m <msg>" meant to be
> used primarily "to leave a note to myself" when the user runs
> --fixup=amend:<commit>, to just record the points to be elaborated
> when the message is written for real much later?  E.g.
>
>     ... hack hack hack ...
>     ... good stopping point, but cannot afford time to write
>     ... a good log message now
>     $ git commit --fixup=amend:HEAD~2 -m 'talk about X, Y and Z' -a
>     ... hack hack hack ...
>     ... possibly doing something entirely different ...
>     ... finally comes back to finish cleaning up the branch for real ...
>     $ git rebase --autosquash -i origin
>
> And one of the insn created in the todo sheet would be amend!, whose
> commit message has the message taken from the original HEAD~2 PLUS the
> reminder to the user that s/he needs to talk about X, Y and Z?  And
> the user at that point writes more comprehensive message about these
> three things?
>

But here in this case, after `git rebase --autosquash -i origin`, it will not open editor again and user is not allowed to write more comprehensive message about these three things, unless the user manually changes from automatically converted `pick` to `fixup -C`, to `fixup -c` command in the rebase todo list that gets opened after `git rebase --autosquash`. And for this case `git commit --squash` is more easy to use.

Show 16 quoted lines
> That is a made-up example of what "appending some short strings
> possibly full of typoes without having to open an editor" could be
> useful for.  I am not sure if it is truly useful, or if it is just a
> hand wavy excuse not to mark -m/-F incompatible with --fixup=amend
> without a real merit [*].
>
>     Side note: one reason why I do not find it realistic is that it
>     is unlikely that the user would use --fixup=amend to slurp in
>     the original log message when recording "good stopping point,
>     but cannot afford time" fixup.  "--squash HEAD~2 -m <msg>" would
>     be much faster to record the "note to myself" reminder, and when
>     the user finally comes back to clean things up, the amount of
>     work to edit the original's message while looking at the "note
>     to myself" appended at the end would not be any different in
>     either workflow.
>
Yes, I also thought the same and agree with it.
> In any case, that was the kind of answer(s) I was looking for when I
> asked "what is this good for?" question.
>

Thanks a lot for explaining each perspective in detail. So, now if we use `-m` as an option to write side-note then `--squash` is already available and for fixing the commit message opening the editor is a must expected option. So shall we remove the `-m` option compatibility if `amend`/ `reword` suboptions are passed to `git commit --fixup` ?

Thanks and Regards, Charvi

Previous: Junio C HamanoNext: Junio C Hamano
Message 11 of 44 in “[Outreachy] commit: Implementation of "amend!" commit”
  1. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Feb 17, 2021
  2. 1/6 sequencer: export subject_length()Charvi Mendiratta, Feb 17, 2021
  3. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Feb 17, 2021
  4. Junio C HamanoFeb 17, 2021
  5. Charvi MendirattaFeb 18, 2021
  6. Junio C HamanoFeb 18, 2021
  7. Junio C HamanoFeb 18, 2021
  8. Charvi MendirattaFeb 19, 2021
  9. Charvi MendirattaFeb 19, 2021
  10. Junio C HamanoFeb 20, 2021
  11. Charvi MendirattaFeb 21, 2021
  12. Junio C HamanoFeb 21, 2021
  13. Charvi MendirattaFeb 21, 2021
  14. Junio C HamanoFeb 22, 2021
  15. Charvi MendirattaFeb 23, 2021
  16. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Feb 17, 2021
  17. Junio C HamanoFeb 17, 2021
  18. Charvi MendirattaFeb 18, 2021
  19. 4/6 t7500: add tests for --fixup[amend|reword] optionsCharvi Mendiratta, Feb 17, 2021
  20. Junio C HamanoFeb 17, 2021
  21. Charvi MendirattaFeb 18, 2021
  22. Junio C HamanoFeb 18, 2021
  23. Charvi MendirattaFeb 19, 2021
  24. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Feb 17, 2021
  25. 6/6 doc/git-commit: add documentation for fixup[amend|reword] optionsCharvi Mendiratta, Feb 17, 2021
  26. Junio C HamanoFeb 18, 2021
  27. Charvi MendirattaFeb 19, 2021
  28. Junio C HamanoFeb 23, 2021
  29. Charvi MendirattaFeb 24, 2021
  30. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Feb 25, 2021
  31. 1/6 sequencer: export subject_length()Charvi Mendiratta, Feb 25, 2021
  32. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Feb 25, 2021
  33. Junio C HamanoFeb 25, 2021
  34. Charvi MendirattaFeb 26, 2021
  35. Junio C HamanoFeb 26, 2021
  36. Charvi MendirattaFeb 27, 2021
  37. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Feb 25, 2021
  38. Junio C HamanoFeb 25, 2021
  39. Charvi MendirattaFeb 26, 2021
  40. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Feb 25, 2021
  41. 4/6 t7500: add tests for --fixup=[amend|reword] optionsCharvi Mendiratta, Feb 25, 2021
  42. 6/6 doc/git-commit: add documentation for fixup=[amend|reword] optionsCharvi Mendiratta, Feb 25, 2021
  43. Junio C HamanoFeb 25, 2021
  44. Charvi MendirattaFeb 26, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.