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

Re: [PATCH v3 6/6] doc/git-commit: add documentation for fixup=[amend|reword] options

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Mar 2, 2021, 06:39 UTC
Message-ID
<CAPig+cRvwvT7QrO0-aLZX-2vsBPJSq6WO-O7g5A0OjDMNAYmCQ@mail.gmail.com>
In-Reply-To
<20210301084512.27170-7-charvi077@gmail.com>
On Mon, Mar 1, 2021 at 3:52 AM Charvi Mendiratta <charvi077@gmail.com> wrote:
Show 8 quoted lines
> Signed-off-by: Charvi Mendiratta <charvi077@gmail.com>
> ---
> diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
> @@ -9,7 +9,7 @@ SYNOPSIS
> +          [--dry-run] [(-c | -C | --squash) <commit> | --fixup [(amend|reword):]<commit>)]
> @@ -86,11 +86,39 @@ OPTIONS
> ---fixup=<commit>::
> +--fixup=[(amend|reword):]<commit>::

Although technically correct, I can't help but wonder if we can be more friendly to readers by rephrasing this as:

    --fixup=<commit>::
    --fixup=amend:<commit>::
    --fixup=reword:<commit>::

which is probably a lot easier to take in and understand at a glance. Same comment applies to the synopsis.

Not necessarily worth a re-roll.
Show 5 quoted lines
> +       Without `amend:` or `reword:`, create a `fixup!` commit where
> +       the commit message will be the subject line from the specified
> +       commit with a prefix of "fixup!'". The resulting "fixup!" commit
> +       is further used with `git rebase --autosquash` to fixup the
> +       content of the specified commit.

I think it becomes important at this point to make it more clear that _only_ the content of <commit> gets changed by the "fixup!" commit, and that the log message of <commit> is untouched.

Show 12 quoted lines
> +The `--fixup=amend:<commit>` form creates an "amend!" commit to
> +fixup both the content and the commit log message of the specified
> +commit. The resulting "amend!" commit's commit message subject
> +will be the subject line from the specified commit with a prefix of
> +"amend!'" and the message body will be commit log message of the
> +specified commit. It also invokes an editor seeded with the log
> +message of the "amend!" commit to allow to edit further. And it
> +refuses to create "amend!" commit if it's commit message body is
> +empty unless used with the `--allow-empty-message` option. "amend!"
> +commit when rebased with `--autosquash` will fixup the contents and
> +replace the commit message of the specified commit with the "amend!"
> +commit's message body.

I had to read this several times to understand what it is trying to say. I believe that part of the problem is that the bulk of the description goes into great detail describing bits and behaviors which make no sense without understanding what an "amend!" commit actually does, which isn't explained until the very last sentence. So, I think the entire description needs to be flipped on its head. In particular, it should start by saying "create a new commit which both fixes up the content of <commit> and replaces <commit>'s log message", and only then dive into the details.

In fact, what I just wrote suggests a larger problem with the description of `--fixup` overall. There is no high-level explanation of what a "fixup" (or "amend" or "reword") is; it just dives right into the minutiae without providing the reader with sufficient context to understand any of it. Only a reader who is already familiar with interactive rebase is likely to grok what is being said here. So, extending the thought I expressed above, it would be helpful for the description of `--fixup=[amend:|reword:]` to start by first explaining what a "fixup" is, followed by simple descriptions of "amend" and "reword" (building upon "fixup"), and followed finally by details of each. Very roughly, something like this:

    Creates a new commit which "fixes up" <commit> when applied with
    `git rebase --autosquash`.
    A "fixup" commit changes the content of <commit> but leaves its
    log message untouched.
    An "amend" commit is like "fixup" but also replaces the log
    message of <commit> with the log message of the "amend" commit.
    A "reword" commit replaces the log message of <commit> with its
    own log message but makes no changes to the content.
And then dive into the details of each variation.
> +The `--fixup=amend:` and `--fixup=reword:` forms cannot be used with
> +other options to add to the commit log message i.e it is incompatible
> +with `-m`/`-F`/`-c`/`-C` options.

I suppose it doesn't hurt, but I wonder if it's really necessary to document this considering that the user will learn soon enough upon trying invalid combinations.

> +Also, after fixing the commit using `--fixup`, with or without option
> +and rebased with `--autosquash`, the authorship of the original commit
> +remains unchanged. See linkgit:git-rebase[1] for details.
Good.
Show 6 quoted lines
> diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
> @@ -593,16 +593,17 @@ See also INCOMPATIBLE OPTIONS below.
>  --autosquash::
>  --no-autosquash::
> +       When the commit log message begins with "squash! ..." (or "fixup! ..."
> +       or "amend! ..."), and there is already a commit in the todo list that
Should this also be mentioning `reword!`?
> +       matches the same `...`, automatically modify the todo list of
> +       `rebase -i`, so that the commit marked for squashing comes right after
> +       the commit to be modified, and change the action of the moved commit
> +       from `pick` to `squash` (or `fixup` or `fixup -C`) respectively. A commit

It's becoming difficult to know which of the "foo!" prefixes get transformed into which sequencer command since there is no longer a one-to-one correspondence between "foo!" prefixes and sequencer commands as there was when only "squash!" and "fixup!" existed. The reader should be told what sequencer command(s) "amend!" and "reword!" become.

Show 5 quoted lines
> +       matches the `...` if the commit subject matches, or if the `...` refers
> +       to the commit's hash. As a fall-back, partial matches of the commit
> +       subject work, too. The recommended way to create fixup/squash/amend
> +       commits is by using the `--fixup=[amend|reword]`/`--squash` options of
> +       linkgit:git-commit[1].

At this point, it may be beneficial to write these out long-form to make it easier on the reader; something along the lines of:

    ... the `--fixup`, `--fixup:amend:`, `--fixup:reword:`, and
    `--squash` options of ...
Previous: Charvi MendirattaNext: Charvi Mendiratta
Message 34 of 95 in “[Outreachy] commit: Implementation of "amend!" commit”
  1. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Mar 1, 2021
  2. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Mar 1, 2021
  3. Junio C HamanoMar 1, 2021
  4. Charvi MendirattaMar 3, 2021
  5. Eric SunshineMar 1, 2021
  6. Junio C HamanoMar 1, 2021
  7. Eric SunshineMar 1, 2021
  8. Charvi MendirattaMar 3, 2021
  9. Charvi MendirattaMar 3, 2021
  10. Eric SunshineMar 3, 2021
  11. Charvi MendirattaMar 3, 2021
  12. Junio C HamanoMar 4, 2021
  13. Charvi MendirattaMar 4, 2021
  14. Charvi MendirattaMar 3, 2021
  15. Eric SunshineMar 3, 2021
  16. Charvi MendirattaMar 3, 2021
  17. 1/6 sequencer: export subject_length()Charvi Mendiratta, Mar 1, 2021
  18. Eric SunshineMar 1, 2021
  19. Junio C HamanoMar 3, 2021
  20. Charvi MendirattaMar 3, 2021
  21. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Mar 1, 2021
  22. 4/6 t7500: add tests for --fixup=[amend|reword] optionsCharvi Mendiratta, Mar 1, 2021
  23. Eric SunshineMar 2, 2021
  24. Junio C HamanoMar 3, 2021
  25. Charvi MendirattaMar 3, 2021
  26. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Mar 1, 2021
  27. Junio C HamanoMar 1, 2021
  28. Charvi MendirattaMar 3, 2021
  29. Eric SunshineMar 1, 2021
  30. Charvi MendirattaMar 3, 2021
  31. 6/6 doc/git-commit: add documentation for fixup=[amend|reword] optionsCharvi Mendiratta, Mar 1, 2021
  32. Junio C HamanoMar 1, 2021
  33. Charvi MendirattaMar 3, 2021
  34. Eric SunshineMar 2, 2021
  35. Charvi MendirattaMar 3, 2021
  36. Eric SunshineMar 3, 2021
  37. Charvi MendirattaMar 3, 2021
  38. Junio C HamanoMar 4, 2021
  39. Charvi MendirattaMar 4, 2021
  40. Junio C HamanoMar 4, 2021
  41. Charvi MendirattaMar 5, 2021
  42. Junio C HamanoMar 5, 2021
  43. Charvi MendirattaMar 6, 2021
  44. Eric SunshineMar 6, 2021
  45. Junio C HamanoMar 1, 2021
  46. Charvi MendirattaMar 3, 2021
  47. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Mar 10, 2021
  48. Eric SunshineMar 11, 2021
  49. Charvi MendirattaMar 11, 2021
  50. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Mar 13, 2021
  51. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Mar 13, 2021
  52. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Mar 13, 2021
  53. Eric SunshineMar 14, 2021
  54. 1/6 sequencer: export and rename subject_length()Charvi Mendiratta, Mar 13, 2021
  55. 4/6 t7500: add tests for --fixup=[amend|reword] optionsCharvi Mendiratta, Mar 13, 2021
  56. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Mar 13, 2021
  57. 6/6 doc/git-commit: add documentation for fixup=[amend|reword] optionsCharvi Mendiratta, Mar 13, 2021
  58. Eric SunshineMar 14, 2021
  59. Charvi MendirattaMar 14, 2021
  60. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Mar 15, 2021
  61. Junio C HamanoMar 19, 2021
  62. Eric SunshineMar 19, 2021
  63. Charvi MendirattaMar 19, 2021
  64. 1/6 sequencer: export and rename subject_length()Charvi Mendiratta, Mar 15, 2021
  65. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Mar 15, 2021
  66. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Mar 15, 2021
  67. 4/6 t7500: add tests for --fixup=[amend|reword] optionsCharvi Mendiratta, Mar 15, 2021
  68. 6/6 doc/git-commit: add documentation for fixup=[amend|reword] optionsCharvi Mendiratta, Mar 15, 2021
  69. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Mar 15, 2021
  70. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Mar 10, 2021
  71. Eric SunshineMar 11, 2021
  72. Charvi MendirattaMar 11, 2021
  73. Eric SunshineMar 11, 2021
  74. Charvi MendirattaMar 11, 2021
  75. Junio C HamanoMar 14, 2021
  76. Charvi MendirattaMar 14, 2021
  77. Junio C HamanoMar 14, 2021
  78. Eric SunshineMar 14, 2021
  79. Charvi MendirattaMar 15, 2021
  80. Eric SunshineMar 15, 2021
  81. Charvi MendirattaMar 15, 2021
  82. 1/6 sequencer: export and rename subject_length()Charvi Mendiratta, Mar 10, 2021
  83. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Mar 10, 2021
  84. Junio C HamanoMar 11, 2021
  85. Charvi MendirattaMar 11, 2021
  86. Junio C HamanoMar 11, 2021
  87. Eric SunshineMar 11, 2021
  88. Charvi MendirattaMar 11, 2021
  89. 6/6 doc/git-commit: add documentation for fixup=[amend|reword] optionsCharvi Mendiratta, Mar 10, 2021
  90. Junio C HamanoMar 11, 2021
  91. Charvi MendirattaMar 11, 2021
  92. Eric SunshineMar 11, 2021
  93. Charvi MendirattaMar 11, 2021
  94. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Mar 10, 2021
  95. 4/6 t7500: add tests for --fixup=[amend|reword] optionsCharvi Mendiratta, Mar 10, 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.