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

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Mentored-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Charvi Mendiratta <charvi077@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Charvi Mendiratta 2021-03-15 13:24:36 +05:30 committed by Junio C Hamano
parent 8bedae4599
commit 00ea64ed7a
2 changed files with 50 additions and 16 deletions

View File

@ -9,7 +9,7 @@ SYNOPSIS
-------- --------
[verse] [verse]
'git commit' [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend] 'git commit' [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
[--dry-run] [(-c | -C | --fixup | --squash) <commit>] [--dry-run] [(-c | -C | --squash) <commit> | --fixup [(amend|reword):]<commit>)]
[-F <file> | -m <msg>] [--reset-author] [--allow-empty] [-F <file> | -m <msg>] [--reset-author] [--allow-empty]
[--allow-empty-message] [--no-verify] [-e] [--author=<author>] [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
[--date=<date>] [--cleanup=<mode>] [--[no-]status] [--date=<date>] [--cleanup=<mode>] [--[no-]status]
@ -86,11 +86,44 @@ OPTIONS
Like '-C', but with `-c` the editor is invoked, so that Like '-C', but with `-c` the editor is invoked, so that
the user can further edit the commit message. the user can further edit the commit message.
--fixup=<commit>:: --fixup=[(amend|reword):]<commit>::
Construct a commit message for use with `rebase --autosquash`. Create a new commit which "fixes up" `<commit>` when applied with
The commit message will be the subject line from the specified `git rebase --autosquash`. Plain `--fixup=<commit>` creates a
commit with a prefix of "fixup! ". See linkgit:git-rebase[1] "fixup!" commit which changes the content of `<commit>` but leaves
for details. its log message untouched. `--fixup=amend:<commit>` is similar but
creates an "amend!" commit which also replaces the log message of
`<commit>` with the log message of the "amend!" commit.
`--fixup=reword:<commit>` creates an "amend!" commit which
replaces the log message of `<commit>` with its own log message
but makes no changes to the content of `<commit>`.
+
The commit created by plain `--fixup=<commit>` has a subject
composed of "fixup!" followed by the subject line from <commit>,
and is recognized specially by `git rebase --autosquash`. The `-m`
option may be used to supplement the log message of the created
commit, but the additional commentary will be thrown away once the
"fixup!" commit is squashed into `<commit>` by
`git rebase --autosquash`.
+
The commit created by `--fixup=amend:<commit>` is similar but its
subject is instead prefixed with "amend!". The log message of
<commit> is copied into the log message of the "amend!" commit and
opened in an editor so it can be refined. When `git rebase
--autosquash` squashes the "amend!" commit into `<commit>`, the
log message of `<commit>` is replaced by the refined log message
from the "amend!" commit. It is an error for the "amend!" commit's
log message to be empty unless `--allow-empty-message` is
specified.
+
`--fixup=reword:<commit>` is shorthand for `--fixup=amend:<commit>
--only`. It creates an "amend!" commit with only a log message
(ignoring any changes staged in the index). When squashed by `git
rebase --autosquash`, it replaces the log message of `<commit>`
without making any other changes.
+
Neither "fixup!" nor "amend!" commits change authorship of
`<commit>` when applied by `git rebase --autosquash`.
See linkgit:git-rebase[1] for details.
--squash=<commit>:: --squash=<commit>::
Construct a commit message for use with `rebase --autosquash`. Construct a commit message for use with `rebase --autosquash`.

View File

@ -593,16 +593,17 @@ See also INCOMPATIBLE OPTIONS below.
--autosquash:: --autosquash::
--no-autosquash:: --no-autosquash::
When the commit log message begins with "squash! ..." (or When the commit log message begins with "squash! ..." or "fixup! ..."
"fixup! ..."), and there is already a commit in the todo list that or "amend! ...", and there is already a commit in the todo list that
matches the same `...`, automatically modify the todo list of rebase matches the same `...`, automatically modify the todo list of
-i so that the commit marked for squashing comes right after the `rebase -i`, so that the commit marked for squashing comes right after
commit to be modified, and change the action of the moved commit the commit to be modified, and change the action of the moved commit
from `pick` to `squash` (or `fixup`). A commit matches the `...` if from `pick` to `squash` or `fixup` or `fixup -C` respectively. A commit
the commit subject matches, or if the `...` refers to the commit's matches the `...` if the commit subject matches, or if the `...` refers
hash. As a fall-back, partial matches of the commit subject work, to the commit's hash. As a fall-back, partial matches of the commit
too. The recommended way to create fixup/squash commits is by using subject work, too. The recommended way to create fixup/amend/squash
the `--fixup`/`--squash` options of linkgit:git-commit[1]. commits is by using the `--fixup`, `--fixup=amend:` or `--fixup=reword:`
and `--squash` options respectively of linkgit:git-commit[1].
+ +
If the `--autosquash` option is enabled by default using the If the `--autosquash` option is enabled by default using the
configuration variable `rebase.autoSquash`, this option can be configuration variable `rebase.autoSquash`, this option can be