Browse Source

git-rebase.txt: document incompatible options

git rebase has many options that only work with one of its three backends.
It also has a few other pairs of incompatible options.  Document these.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Elijah Newren 7 years ago committed by Junio C Hamano
parent
commit
5dacd4abdd
  1. 85
      Documentation/git-rebase.txt

85
Documentation/git-rebase.txt

@ -243,11 +243,15 @@ leave out at most one of A and B, in which case it defaults to HEAD. @@ -243,11 +243,15 @@ leave out at most one of A and B, in which case it defaults to HEAD.
--keep-empty::
Keep the commits that do not change anything from its
parents in the result.
+
See also INCOMPATIBLE OPTIONS below.

--allow-empty-message::
By default, rebasing commits with an empty message will fail.
This option overrides that behavior, allowing commits with empty
messages to be rebased.
+
See also INCOMPATIBLE OPTIONS below.

--skip::
Restart the rebasing process by skipping the current patch.
@ -271,6 +275,8 @@ branch on top of the <upstream> branch. Because of this, when a merge @@ -271,6 +275,8 @@ branch on top of the <upstream> branch. Because of this, when a merge
conflict happens, the side reported as 'ours' is the so-far rebased
series, starting with <upstream>, and 'theirs' is the working branch. In
other words, the sides are swapped.
+
See also INCOMPATIBLE OPTIONS below.

-s <strategy>::
--strategy=<strategy>::
@ -280,8 +286,10 @@ other words, the sides are swapped. @@ -280,8 +286,10 @@ other words, the sides are swapped.
+
Because 'git rebase' replays each commit from the working branch
on top of the <upstream> branch using the given strategy, using
the 'ours' strategy simply discards all patches from the <branch>,
the 'ours' strategy simply empties all patches from the <branch>,
which makes little sense.
+
See also INCOMPATIBLE OPTIONS below.

-X <strategy-option>::
--strategy-option=<strategy-option>::
@ -289,6 +297,8 @@ which makes little sense. @@ -289,6 +297,8 @@ which makes little sense.
This implies `--merge` and, if no strategy has been
specified, `-s recursive`. Note the reversal of 'ours' and
'theirs' as noted above for the `-m` option.
+
See also INCOMPATIBLE OPTIONS below.

-S[<keyid>]::
--gpg-sign[=<keyid>]::
@ -324,6 +334,8 @@ which makes little sense. @@ -324,6 +334,8 @@ which makes little sense.
and after each change. When fewer lines of surrounding
context exist they all must match. By default no context is
ever ignored.
+
See also INCOMPATIBLE OPTIONS below.

-f::
--force-rebase::
@ -355,19 +367,22 @@ default is `--no-fork-point`, otherwise the default is `--fork-point`. @@ -355,19 +367,22 @@ default is `--no-fork-point`, otherwise the default is `--fork-point`.
--whitespace=<option>::
These flag are passed to the 'git apply' program
(see linkgit:git-apply[1]) that applies the patch.
Incompatible with the --interactive option.
+
See also INCOMPATIBLE OPTIONS below.

--committer-date-is-author-date::
--ignore-date::
These flags are passed to 'git am' to easily change the dates
of the rebased commits (see linkgit:git-am[1]).
Incompatible with the --interactive option.
+
See also INCOMPATIBLE OPTIONS below.

--signoff::
Add a Signed-off-by: trailer to all the rebased commits. Note
that if `--interactive` is given then only commits marked to be
picked, edited or reworded will have the trailer added. Incompatible
with the `--preserve-merges` option.
picked, edited or reworded will have the trailer added.
+
See also INCOMPATIBLE OPTIONS below.

-i::
--interactive::
@ -378,6 +393,8 @@ default is `--no-fork-point`, otherwise the default is `--fork-point`. @@ -378,6 +393,8 @@ default is `--no-fork-point`, otherwise the default is `--fork-point`.
The commit list format can be changed by setting the configuration option
rebase.instructionFormat. A customized instruction format will automatically
have the long commit hash prepended to the format.
+
See also INCOMPATIBLE OPTIONS below.

-r::
--rebase-merges[=(rebase-cousins|no-rebase-cousins)]::
@ -404,7 +421,7 @@ It is currently only possible to recreate the merge commits using the @@ -404,7 +421,7 @@ It is currently only possible to recreate the merge commits using the
`recursive` merge strategy; Different merge strategies can be used only via
explicit `exec git merge -s <strategy> [...]` commands.
+
See also REBASING MERGES below.
See also REBASING MERGES and INCOMPATIBLE OPTIONS below.

-p::
--preserve-merges::
@ -415,6 +432,8 @@ See also REBASING MERGES below. @@ -415,6 +432,8 @@ See also REBASING MERGES below.
This uses the `--interactive` machinery internally, but combining it
with the `--interactive` option explicitly is generally not a good
idea unless you know what you are doing (see BUGS below).
+
See also INCOMPATIBLE OPTIONS below.

-x <cmd>::
--exec <cmd>::
@ -437,6 +456,8 @@ squash/fixup series. @@ -437,6 +456,8 @@ squash/fixup series.
+
This uses the `--interactive` machinery internally, but it can be run
without an explicit `--interactive`.
+
See also INCOMPATIBLE OPTIONS below.

--root::
Rebase all commits reachable from <branch>, instead of
@ -447,6 +468,8 @@ without an explicit `--interactive`. @@ -447,6 +468,8 @@ without an explicit `--interactive`.
When used together with both --onto and --preserve-merges,
'all' root commits will be rewritten to have <newbase> as parent
instead.
+
See also INCOMPATIBLE OPTIONS below.

--autosquash::
--no-autosquash::
@ -461,11 +484,11 @@ without an explicit `--interactive`. @@ -461,11 +484,11 @@ without an explicit `--interactive`.
too. The recommended way to create fixup/squash commits is by using
the `--fixup`/`--squash` options of linkgit:git-commit[1].
+
This option is only valid when the `--interactive` option is used.
+
If the `--autosquash` option is enabled by default using the
configuration variable `rebase.autoSquash`, this option can be
used to override and disable this setting.
+
See also INCOMPATIBLE OPTIONS below.

--autostash::
--no-autostash::
@ -487,6 +510,52 @@ recreates the topic branch with fresh commits so it can be remerged @@ -487,6 +510,52 @@ recreates the topic branch with fresh commits so it can be remerged
successfully without needing to "revert the reversion" (see the
link:howto/revert-a-faulty-merge.html[revert-a-faulty-merge How-To] for details).

INCOMPATIBLE OPTIONS
--------------------

git-rebase has many flags that are incompatible with each other,
predominantly due to the fact that it has three different underlying
implementations:

* one based on linkgit:git-am[1] (the default)
* one based on git-merge-recursive (merge backend)
* one based on linkgit:git-cherry-pick[1] (interactive backend)

Flags only understood by the am backend:

* --committer-date-is-author-date
* --ignore-date
* --whitespace
* --ignore-whitespace
* -C

Flags understood by both merge and interactive backends:

* --merge
* --strategy
* --strategy-option
* --allow-empty-message

Flags only understood by the interactive backend:

* --[no-]autosquash
* --rebase-merges
* --preserve-merges
* --interactive
* --exec
* --keep-empty
* --autosquash
* --edit-todo
* --root when used in combination with --onto

Other incompatible flag pairs:

* --preserve-merges and --interactive
* --preserve-merges and --signoff
* --preserve-merges and --rebase-merges
* --rebase-merges and --strategy
* --rebase-merges and --strategy-option

include::merge-strategies.txt[]

NOTES

Loading…
Cancel
Save