'\" t
.\"     Title: git-rebase
.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
.\"      Date: 2025-08-22
.\"    Manual: Git Manual
.\"    Source: Git 2.51.0.87.g1fa68948c3
.\"  Language: English
.\"
.TH "GIT\-REBASE" "1" "2025-08-22" "Git 2\&.51\&.0\&.87\&.g1fa6894" "Git Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
git-rebase \- Reapply commits on top of another base tip
.SH "SYNOPSIS"
.sp
.nf
\fIgit rebase\fR [\-i | \-\-interactive] [<options>] [\-\-exec <cmd>]
        [\-\-onto <newbase> | \-\-keep\-base] [<upstream> [<branch>]]
\fIgit rebase\fR [\-i | \-\-interactive] [<options>] [\-\-exec <cmd>] [\-\-onto <newbase>]
        \-\-root [<branch>]
\fIgit rebase\fR (\-\-continue|\-\-skip|\-\-abort|\-\-quit|\-\-edit\-todo|\-\-show\-current\-patch)
.fi
.SH "DESCRIPTION"
.sp
If \fI<branch>\fR is specified, \fBgit\fR \fBrebase\fR will perform an automatic \fBgit\fR \fBswitch\fR \fI<branch>\fR before doing anything else\&. Otherwise it remains on the current branch\&.
.sp
If \fI<upstream>\fR is not specified, the upstream configured in \fBbranch\&.\fR\fI<name>\fR\fB\&.remote\fR and \fBbranch\&.\fR\fI<name>\fR\fB\&.merge\fR options will be used (see \fBgit-config\fR(1) for details) and the \fB\-\-fork\-point\fR option is assumed\&. If you are currently not on any branch or if the current branch does not have a configured upstream, the rebase will abort\&.
.sp
All changes made by commits in the current branch but that are not in \fI<upstream>\fR are saved to a temporary area\&. This is the same set of commits that would be shown by \fBgit\fR \fBlog\fR \fI<upstream>\fR\fB\&.\&.\fR\fBHEAD\fR; or by \fBgit\fR \fBlog\fR \*(Aqfork_point\*(Aq\fB\&.\&.\fR\fBHEAD\fR, if \fB\-\-fork\-point\fR is active (see the description on \fB\-\-fork\-point\fR below); or by \fBgit\fR \fBlog\fR \fBHEAD\fR, if the \fB\-\-root\fR option is specified\&.
.sp
The current branch is reset to \fI<upstream>\fR or \fI<newbase>\fR if the \fB\-\-onto\fR option was supplied\&. This has the exact same effect as \fBgit\fR \fBreset\fR \fB\-\-hard\fR \fI<upstream>\fR (or \fI<newbase>\fR)\&. \fBORIG_HEAD\fR is set to point at the tip of the branch before the reset\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
.sp
\fBORIG_HEAD\fR is not guaranteed to still point to the previous branch tip at the end of the rebase if other commands that write that pseudo\-ref (e\&.g\&. \fBgit\fR \fBreset\fR) are used during the rebase\&. The previous branch tip, however, is accessible using the reflog of the current branch (i\&.e\&. \fB@\fR{1}, see \fBgitrevisions\fR(7))\&.
.sp .5v
.RE
.sp
The commits that were previously saved into the temporary area are then reapplied to the current branch, one by one, in order\&. Note that any commits in \fBHEAD\fR which introduce the same textual changes as a commit in \fBHEAD\fR\fB\&.\&.\fR\fI<upstream>\fR are omitted (i\&.e\&., a patch already accepted upstream with a different commit message or timestamp will be skipped)\&.
.sp
It is possible that a merge failure will prevent this process from being completely automatic\&. You will have to resolve any such merge failure and run \fBgit\fR \fBrebase\fR \fB\-\-continue\fR\&. Another option is to bypass the commit that caused the merge failure with \fBgit\fR \fBrebase\fR \fB\-\-skip\fR\&. To check out the original \fI<branch>\fR and remove the \&.\fBgit/rebase\-apply\fR working files, use the command \fBgit\fR \fBrebase\fR \fB\-\-abort\fR instead\&.
.sp
Assume the following history exists and the current branch is "topic":
.sp
.if n \{\
.RS 4
.\}
.nf
          A\-\-\-B\-\-\-C topic
         /
    D\-\-\-E\-\-\-F\-\-\-G master
.fi
.if n \{\
.RE
.\}
.sp
From this point, the result of either of the following commands:
.sp
.if n \{\
.RS 4
.\}
.nf
git rebase master
git rebase master topic
.fi
.if n \{\
.RE
.\}
.sp
would be:
.sp
.if n \{\
.RS 4
.\}
.nf
                  A\*(Aq\-\-B\*(Aq\-\-C\*(Aq topic
                 /
    D\-\-\-E\-\-\-F\-\-\-G master
.fi
.if n \{\
.RE
.\}
.sp
\fBNOTE:\fR The latter form is just a short\-hand of \fBgit\fR \fBcheckout\fR \fBtopic\fR followed by \fBgit\fR \fBrebase\fR \fBmaster\fR\&. When rebase exits \fBtopic\fR will remain the checked\-out branch\&.
.sp
If the upstream branch already contains a change you have made (e\&.g\&., because you mailed a patch which was applied upstream), then that commit will be skipped and warnings will be issued (if the \fImerge\fR backend is used)\&. For example, running \fBgit\fR \fBrebase\fR \fBmaster\fR on the following history (in which \fBA\fR\*(Aq and \fBA\fR introduce the same set of changes, but have different committer information):
.sp
.if n \{\
.RS 4
.\}
.nf
          A\-\-\-B\-\-\-C topic
         /
    D\-\-\-E\-\-\-A\*(Aq\-\-\-F master
.fi
.if n \{\
.RE
.\}
.sp
will result in:
.sp
.if n \{\
.RS 4
.\}
.nf
                   B\*(Aq\-\-\-C\*(Aq topic
                  /
    D\-\-\-E\-\-\-A\*(Aq\-\-\-F master
.fi
.if n \{\
.RE
.\}
.sp
Here is how you would transplant a topic branch based on one branch to another, to pretend that you forked the topic branch from the latter branch, using \fBrebase\fR \fB\-\-onto\fR\&.
.sp
First let\(cqs assume your \fItopic\fR is based on branch \fInext\fR\&. For example, a feature developed in \fItopic\fR depends on some functionality which is found in \fInext\fR\&.
.sp
.if n \{\
.RS 4
.\}
.nf
    o\-\-\-o\-\-\-o\-\-\-o\-\-\-o  master
         \e
          o\-\-\-o\-\-\-o\-\-\-o\-\-\-o  next
                           \e
                            o\-\-\-o\-\-\-o  topic
.fi
.if n \{\
.RE
.\}
.sp
We want to make \fItopic\fR forked from branch \fImaster\fR; for example, because the functionality on which \fItopic\fR depends was merged into the more stable \fImaster\fR branch\&. We want our tree to look like this:
.sp
.if n \{\
.RS 4
.\}
.nf
    o\-\-\-o\-\-\-o\-\-\-o\-\-\-o  master
        |            \e
        |             o\*(Aq\-\-o\*(Aq\-\-o\*(Aq  topic
         \e
          o\-\-\-o\-\-\-o\-\-\-o\-\-\-o  next
.fi
.if n \{\
.RE
.\}
.sp
We can get this using the following command:
.sp
.if n \{\
.RS 4
.\}
.nf
git rebase \-\-onto master next topic
.fi
.if n \{\
.RE
.\}
.sp
Another example of \-\-onto option is to rebase part of a branch\&. If we have the following situation:
.sp
.if n \{\
.RS 4
.\}
.nf
                            H\-\-\-I\-\-\-J topicB
                           /
                  E\-\-\-F\-\-\-G  topicA
                 /
    A\-\-\-B\-\-\-C\-\-\-D  master
.fi
.if n \{\
.RE
.\}
.sp
then the command
.sp
.if n \{\
.RS 4
.\}
.nf
git rebase \-\-onto master topicA topicB
.fi
.if n \{\
.RE
.\}
.sp
would result in:
.sp
.if n \{\
.RS 4
.\}
.nf
                 H\*(Aq\-\-I\*(Aq\-\-J\*(Aq  topicB
                /
                | E\-\-\-F\-\-\-G  topicA
                |/
    A\-\-\-B\-\-\-C\-\-\-D  master
.fi
.if n \{\
.RE
.\}
.sp
This is useful when topicB does not depend on topicA\&.
.sp
A range of commits could also be removed with rebase\&. If we have the following situation:
.sp
.if n \{\
.RS 4
.\}
.nf
    E\-\-\-F\-\-\-G\-\-\-H\-\-\-I\-\-\-J  topicA
.fi
.if n \{\
.RE
.\}
.sp
then the command
.sp
.if n \{\
.RS 4
.\}
.nf
git rebase \-\-onto topicA~5 topicA~3 topicA
.fi
.if n \{\
.RE
.\}
.sp
would result in the removal of commits F and G:
.sp
.if n \{\
.RS 4
.\}
.nf
    E\-\-\-H\*(Aq\-\-\-I\*(Aq\-\-\-J\*(Aq  topicA
.fi
.if n \{\
.RE
.\}
.sp
This is useful if F and G were flawed in some way, or should not be part of topicA\&. Note that the argument to \fB\-\-onto\fR and the \fI<upstream>\fR parameter can be any valid commit\-ish\&.
.sp
In case of conflict, \fBgit\fR \fBrebase\fR will stop at the first problematic commit and leave conflict markers in the tree\&. You can use \fBgit\fR \fBdiff\fR to locate the markers (<<<<<<) and make edits to resolve the conflict\&. For each file you edit, you need to tell Git that the conflict has been resolved, typically this would be done with
.sp
.if n \{\
.RS 4
.\}
.nf
git add <filename>
.fi
.if n \{\
.RE
.\}
.sp
After resolving the conflict manually and updating the index with the desired resolution, you can continue the rebasing process with
.sp
.if n \{\
.RS 4
.\}
.nf
git rebase \-\-continue
.fi
.if n \{\
.RE
.\}
.sp
Alternatively, you can undo the \fIgit rebase\fR with
.sp
.if n \{\
.RS 4
.\}
.nf
git rebase \-\-abort
.fi
.if n \{\
.RE
.\}
.SH "MODE OPTIONS"
.sp
The options in this section cannot be used with any other option, including not with each other:
.PP
\-\-continue
.RS 4
Restart the rebasing process after having resolved a merge conflict\&.
.RE
.PP
\-\-skip
.RS 4
Restart the rebasing process by skipping the current patch\&.
.RE
.PP
\-\-abort
.RS 4
Abort the rebase operation and reset HEAD to the original branch\&. If
\fI<branch>\fR
was provided when the rebase operation was started, then
\fBHEAD\fR
will be reset to
\fI<branch>\fR\&. Otherwise
\fBHEAD\fR
will be reset to where it was when the rebase operation was started\&.
.RE
.PP
\-\-quit
.RS 4
Abort the rebase operation but
\fBHEAD\fR
is not reset back to the original branch\&. The index and working tree are also left unchanged as a result\&. If a temporary stash entry was created using
\fB\-\-autostash\fR, it will be saved to the stash list\&.
.RE
.PP
\-\-edit\-todo
.RS 4
Edit the todo list during an interactive rebase\&.
.RE
.PP
\-\-show\-current\-patch
.RS 4
Show the current patch in an interactive rebase or when rebase is stopped because of conflicts\&. This is the equivalent of
\fBgit\fR
\fBshow\fR
\fBREBASE_HEAD\fR\&.
.RE
.SH "OPTIONS"
.PP
\-\-onto <newbase>
.RS 4
Starting point at which to create the new commits\&. If the
\fB\-\-onto\fR
option is not specified, the starting point is
\fI<upstream>\fR\&. May be any valid commit, and not just an existing branch name\&.
.sp
As a special case, you may use "A\&.\&.\&.B" as a shortcut for the merge base of A and B if there is exactly one merge base\&. You can leave out at most one of A and B, in which case it defaults to HEAD\&.
.RE
.PP
\-\-keep\-base
.RS 4
Set the starting point at which to create the new commits to the merge base of
\fI<upstream>\fR
and
\fI<branch>\fR\&. Running
\fBgit\fR
\fBrebase\fR
\fB\-\-keep\-base\fR
\fI<upstream>\fR
\fI<branch>\fR
is equivalent to running
\fBgit\fR
\fBrebase\fR
\fB\-\-reapply\-cherry\-picks\fR
\fB\-\-no\-fork\-point\fR
\fB\-\-onto\fR
\fI<upstream>\fR\fB\&.\&.\&.\fR\fI<branch>\fR
\fI<upstream>\fR
\fI<branch>\fR\&.
.sp
This option is useful in the case where one is developing a feature on top of an upstream branch\&. While the feature is being worked on, the upstream branch may advance and it may not be the best idea to keep rebasing on top of the upstream but to keep the base commit as\-is\&. As the base commit is unchanged this option implies
\fB\-\-reapply\-cherry\-picks\fR
to avoid losing commits\&.
.sp
Although both this option and
\fB\-\-fork\-point\fR
find the merge base between
\fI<upstream>\fR
and
\fI<branch>\fR, this option uses the merge base as the
\fIstarting point\fR
on which new commits will be created, whereas
\fB\-\-fork\-point\fR
uses the merge base to determine the
\fIset of commits\fR
which will be rebased\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
<upstream>
.RS 4
Upstream branch to compare against\&. May be any valid commit, not just an existing branch name\&. Defaults to the configured upstream for the current branch\&.
.RE
.PP
<branch>
.RS 4
Working branch; defaults to
\fBHEAD\fR\&.
.RE
.PP
\-\-apply
.RS 4
Use applying strategies to rebase (calling
\fBgit\-am\fR
internally)\&. This option may become a no\-op in the future once the merge backend handles everything the apply one does\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-empty=(drop|keep|stop)
.RS 4
How to handle commits that are not empty to start and are not clean cherry\-picks of any upstream commit, but which become empty after rebasing (because they contain a subset of already upstream changes):
.PP
\fBdrop\fR
.RS 4
The commit will be dropped\&. This is the default behavior\&.
.RE
.PP
\fBkeep\fR
.RS 4
The commit will be kept\&. This option is implied when
\fB\-\-exec\fR
is specified unless
\fB\-i\fR/\fB\-\-interactive\fR
is also specified\&.
.RE
.PP
\fBstop\fR, \fBask\fR
.RS 4
The rebase will halt when the commit is applied, allowing you to choose whether to drop it, edit files more, or just commit the empty changes\&. This option is implied when
\fB\-i\fR/\fB\-\-interactive\fR
is specified\&.
\fBask\fR
is a deprecated synonym of
\fBstop\fR\&.
.RE
.sp
Note that commits which start empty are kept (unless
\fB\-\-no\-keep\-empty\fR
is specified), and commits which are clean cherry\-picks (as determined by
\fBgit\fR
\fBlog\fR
\fB\-\-cherry\-mark\fR
\&.\&.\&.) are detected and dropped as a preliminary step (unless
\fB\-\-reapply\-cherry\-picks\fR
or
\fB\-\-keep\-base\fR
is passed)\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-no\-keep\-empty, \-\-keep\-empty
.RS 4
Do not keep commits that start empty before the rebase (i\&.e\&. that do not change anything from its parent) in the result\&. The default is to keep commits which start empty, since creating such commits requires passing the
\fB\-\-allow\-empty\fR
override flag to
\fBgit\fR
\fBcommit\fR, signifying that a user is very intentionally creating such a commit and thus wants to keep it\&.
.sp
Usage of this flag will probably be rare, since you can get rid of commits that start empty by just firing up an interactive rebase and removing the lines corresponding to the commits you don\(cqt want\&. This flag exists as a convenient shortcut, such as for cases where external tools generate many empty commits and you want them all removed\&.
.sp
For commits which do not start empty but become empty after rebasing, see the
\fB\-\-empty\fR
flag\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-reapply\-cherry\-picks, \-\-no\-reapply\-cherry\-picks
.RS 4
Reapply all clean cherry\-picks of any upstream commit instead of preemptively dropping them\&. (If these commits then become empty after rebasing, because they contain a subset of already upstream changes, the behavior towards them is controlled by the
\fB\-\-empty\fR
flag\&.)
.sp
In the absence of
\fB\-\-keep\-base\fR
(or if
\fB\-\-no\-reapply\-cherry\-picks\fR
is given), these commits will be automatically dropped\&. Because this necessitates reading all upstream commits, this can be expensive in repositories with a large number of upstream commits that need to be read\&. When using the
\fImerge\fR
backend, warnings will be issued for each dropped commit (unless
\fB\-\-quiet\fR
is given)\&. Advice will also be issued unless
\fBadvice\&.skippedCherryPicks\fR
is set to false (see
\fBgit-config\fR(1))\&.
.sp
\fB\-\-reapply\-cherry\-picks\fR
allows rebase to forgo reading all upstream commits, potentially improving performance\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-allow\-empty\-message
.RS 4
No\-op\&. Rebasing commits with an empty message used to fail and this option would override that behavior, allowing commits with empty messages to be rebased\&. Now commits with an empty message do not cause rebasing to halt\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-m, \-\-merge
.RS 4
Using merging strategies to rebase (default)\&.
.sp
Note that a rebase merge works by replaying each commit from the working branch on top of the
\fI<upstream>\fR
branch\&. Because of this, when a merge conflict happens, the side reported as
\fIours\fR
is the so\-far rebased series, starting with
\fI<upstream>\fR, and
\fItheirs\fR
is the working branch\&. In other words, the sides are swapped\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-s <strategy>, \-\-strategy=<strategy>
.RS 4
Use the given merge strategy, instead of the default
\fBort\fR\&. This implies
\fB\-\-merge\fR\&.
.sp
Because
\fBgit\fR
\fBrebase\fR
replays each commit from the working branch on top of the
\fI<upstream>\fR
branch using the given strategy, using the
\fBours\fR
strategy simply empties all patches from the
\fI<branch>\fR, which makes little sense\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-X <strategy\-option>, \-\-strategy\-option=<strategy\-option>
.RS 4
Pass the <strategy\-option> through to the merge strategy\&. This implies
\fB\-\-merge\fR
and, if no strategy has been specified,
\fB\-s\fR
\fBort\fR\&. Note the reversal of
\fIours\fR
and
\fItheirs\fR
as noted above for the
\fB\-m\fR
option\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\fB\-\-rerere\-autoupdate\fR, \fB\-\-no\-rerere\-autoupdate\fR
.RS 4
After the rerere mechanism reuses a recorded resolution on the current conflict to update the files in the working tree, allow it to also update the index with the result of resolution\&.
\fB\-\-no\-rerere\-autoupdate\fR
is a good way to double\-check what
\fBrerere\fR
did and catch potential mismerges, before committing the result to the index with a separate
\fBgit\fR
\fBadd\fR\&.
.RE
.PP
\-S[<keyid>], \-\-gpg\-sign[=<keyid>], \-\-no\-gpg\-sign
.RS 4
GPG\-sign commits\&. The
\fBkeyid\fR
argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space\&.
\fB\-\-no\-gpg\-sign\fR
is useful to countermand both
\fBcommit\&.gpgSign\fR
configuration variable, and earlier
\fB\-\-gpg\-sign\fR\&.
.RE
.PP
\-q, \-\-quiet
.RS 4
Be quiet\&. Implies
\fB\-\-no\-stat\fR\&.
.RE
.PP
\-v, \-\-verbose
.RS 4
Be verbose\&. Implies
\fB\-\-stat\fR\&.
.RE
.PP
\-\-stat
.RS 4
Show a diffstat of what changed upstream since the last rebase\&. The diffstat is also controlled by the configuration option rebase\&.stat\&.
.RE
.PP
\-n, \-\-no\-stat
.RS 4
Do not show a diffstat as part of the rebase process\&.
.RE
.PP
\-\-no\-verify
.RS 4
This option bypasses the pre\-rebase hook\&. See also
\fBgithooks\fR(5)\&.
.RE
.PP
\-\-verify
.RS 4
Allows the pre\-rebase hook to run, which is the default\&. This option can be used to override
\fB\-\-no\-verify\fR\&. See also
\fBgithooks\fR(5)\&.
.RE
.PP
\-C<n>
.RS 4
Ensure at least
\fI<n>\fR
lines of surrounding context match before and after each change\&. When fewer lines of surrounding context exist they all must match\&. By default no context is ever ignored\&. Implies
\fB\-\-apply\fR\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-no\-ff, \-\-force\-rebase, \-f
.RS 4
Individually replay all rebased commits instead of fast\-forwarding over the unchanged ones\&. This ensures that the entire history of the rebased branch is composed of new commits\&.
.sp
You may find this helpful after reverting a topic branch merge, as this option recreates the topic branch with fresh commits so it can be remerged successfully without needing to "revert the reversion" (see the
\m[blue]\fBrevert\-a\-faulty\-merge How\-To\fR\m[]\&\s-2\u[1]\d\s+2
for details)\&.
.RE
.PP
\-\-fork\-point, \-\-no\-fork\-point
.RS 4
Use reflog to find a better common ancestor between
\fI<upstream>\fR
and
\fI<branch>\fR
when calculating which commits have been introduced by
\fI<branch>\fR\&.
.sp
When
\fB\-\-fork\-point\fR
is active,
\fIfork_point\fR
will be used instead of
\fI<upstream>\fR
to calculate the set of commits to rebase, where
\fIfork_point\fR
is the result of
\fBgit\fR
\fBmerge\-base\fR
\fB\-\-fork\-point\fR
\fI<upstream>\fR
\fI<branch>\fR
command (see
\fBgit-merge-base\fR(1))\&. If
\fIfork_point\fR
ends up being empty, the
\fI<upstream>\fR
will be used as a fallback\&.
.sp
If
\fI<upstream>\fR
or
\fB\-\-keep\-base\fR
is given on the command line, then the default is
\fB\-\-no\-fork\-point\fR, otherwise the default is
\fB\-\-fork\-point\fR\&. See also
\fBrebase\&.forkpoint\fR
in
\fBgit-config\fR(1)\&.
.sp
If your branch was based on
\fI<upstream>\fR
but
\fI<upstream>\fR
was rewound and your branch contains commits which were dropped, this option can be used with
\fB\-\-keep\-base\fR
in order to drop those commits from your branch\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-ignore\-whitespace
.RS 4
Ignore whitespace differences when trying to reconcile differences\&. Currently, each backend implements an approximation of this behavior:
.PP
apply backend
.RS 4
When applying a patch, ignore changes in whitespace in context lines\&. Unfortunately, this means that if the "old" lines being replaced by the patch differ only in whitespace from the existing file, you will get a merge conflict instead of a successful patch application\&.
.RE
.PP
merge backend
.RS 4
Treat lines with only whitespace changes as unchanged when merging\&. Unfortunately, this means that any patch hunks that were intended to modify whitespace and nothing else will be dropped, even if the other side had no changes that conflicted\&.
.RE
.RE
.PP
\-\-whitespace=<option>
.RS 4
This flag is passed to the
\fBgit\fR
\fBapply\fR
program (see
\fBgit-apply\fR(1)) that applies the patch\&. Implies
\fB\-\-apply\fR\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-committer\-date\-is\-author\-date
.RS 4
Instead of using the current time as the committer date, use the author date of the commit being rebased as the committer date\&. This option implies
\fB\-\-force\-rebase\fR\&.
.RE
.PP
\-\-ignore\-date, \-\-reset\-author\-date
.RS 4
Instead of using the author date of the original commit, use the current time as the author date of the rebased commit\&. This option implies
\fB\-\-force\-rebase\fR\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-signoff
.RS 4
Add a
\fBSigned\-off\-by\fR
trailer to all the rebased commits\&. Note that if
\fB\-\-interactive\fR
is given then only commits marked to be picked, edited or reworded will have the trailer added\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-i, \-\-interactive
.RS 4
Make a list of the commits which are about to be rebased\&. Let the user edit that list before rebasing\&. This mode can also be used to split commits (see SPLITTING COMMITS below)\&.
.sp
The commit list format can be changed by setting the configuration option rebase\&.instructionFormat\&. A customized instruction format will automatically have the commit hash prepended to the format\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-r, \-\-rebase\-merges[=(rebase\-cousins|no\-rebase\-cousins)], \-\-no\-rebase\-merges
.RS 4
By default, a rebase will simply drop merge commits from the todo list, and put the rebased commits into a single, linear branch\&. With
\fB\-\-rebase\-merges\fR, the rebase will instead try to preserve the branching structure within the commits that are to be rebased, by recreating the merge commits\&. Any resolved merge conflicts or manual amendments in these merge commits will have to be resolved/re\-applied manually\&.
\fB\-\-no\-rebase\-merges\fR
can be used to countermand both the
\fBrebase\&.rebaseMerges\fR
config option and a previous
\fB\-\-rebase\-merges\fR\&.
.sp
When rebasing merges, there are two modes:
\fBrebase\-cousins\fR
and
\fBno\-rebase\-cousins\fR\&. If the mode is not specified, it defaults to
\fBno\-rebase\-cousins\fR\&. In
\fBno\-rebase\-cousins\fR
mode, commits which do not have
\fI<upstream>\fR
as direct ancestor will keep their original branch point, i\&.e\&. commits that would be excluded by
\fBgit-log\fR(1)\*(Aqs
\fB\-\-ancestry\-path\fR
option will keep their original ancestry by default\&. In
\fBrebase\-cousins\fR
mode, such commits are instead rebased onto
\fI<upstream>\fR
(or
\fI<onto>\fR, if specified)\&.
.sp
It is currently only possible to recreate the merge commits using the
\fBort\fR
merge strategy; different merge strategies can be used only via explicit
\fBexec\fR
\fBgit\fR
\fBmerge\fR
\fB\-s\fR
\fI<strategy>\fR
[\&.\&.\&.] commands\&.
.sp
See also REBASING MERGES and INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-x <cmd>, \-\-exec <cmd>
.RS 4
Append "exec <cmd>" after each line creating a commit in the final history\&.
\fI<cmd>\fR
will be interpreted as one or more shell commands\&. Any command that fails will interrupt the rebase, with exit code 1\&.
.sp
You may execute several commands by either using one instance of
\fB\-\-exec\fR
with several commands:
.sp
.if n \{\
.RS 4
.\}
.nf
git rebase \-i \-\-exec "cmd1 && cmd2 && \&.\&.\&."
.fi
.if n \{\
.RE
.\}
.sp
or by giving more than one
\fB\-\-exec\fR:
.sp
.if n \{\
.RS 4
.\}
.nf
git rebase \-i \-\-exec "cmd1" \-\-exec "cmd2" \-\-exec \&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
If
\fB\-\-autosquash\fR
is used,
\fBexec\fR
lines will not be appended for the intermediate commits, and will only appear at the end of each squash/fixup series\&.
.sp
This uses the
\fB\-\-interactive\fR
machinery internally, but it can be run without an explicit
\fB\-\-interactive\fR\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-root
.RS 4
Rebase all commits reachable from
\fI<branch>\fR, instead of limiting them with an
\fI<upstream>\fR\&. This allows you to rebase the root commit(s) on a branch\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-autosquash, \-\-no\-autosquash
.RS 4
Automatically squash commits with specially formatted messages into previous commits being rebased\&. If a commit message starts with "squash! ", "fixup! " or "amend! ", the remainder of the title is taken as a commit specifier, which matches a previous commit if it matches the title or the hash of that commit\&. If no commit matches fully, matches of the specifier with the start of commit titles are considered\&.
.sp
In the rebase todo list, the actions of squash, fixup and amend commits are changed from
\fBpick\fR
to
\fBsquash\fR,
\fBfixup\fR
or
\fBfixup\fR
\fB\-C\fR, respectively, and they are moved right after the commit they modify\&. The
\fB\-\-interactive\fR
option can be used to review and edit the todo list before proceeding\&.
.sp
The recommended way to create commits with squash markers is by using the
\fB\-\-squash\fR,
\fB\-\-fixup\fR,
\fB\-\-fixup=amend:\fR
or
\fB\-\-fixup=reword:\fR
options of
\fBgit-commit\fR(1), which take the target commit as an argument and automatically fill in the title of the new commit from that\&.
.sp
Setting configuration variable
\fBrebase\&.autoSquash\fR
to true enables auto\-squashing by default for interactive rebase\&. The
\fB\-\-no\-autosquash\fR
option can be used to override that setting\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.PP
\-\-autostash, \-\-no\-autostash
.RS 4
Automatically create a temporary stash entry before the operation begins, and apply it after the operation ends\&. This means that you can run rebase on a dirty worktree\&. However, use with care: the final stash application after a successful rebase might result in non\-trivial conflicts\&.
.RE
.PP
\-\-reschedule\-failed\-exec, \-\-no\-reschedule\-failed\-exec
.RS 4
Automatically reschedule
\fBexec\fR
commands that failed\&. This only makes sense in interactive mode (or when an
\fB\-\-exec\fR
option was provided)\&.
.sp
This option applies once a rebase is started\&. It is preserved for the whole rebase based on, in order, the command line option provided to the initial
\fBgit\fR
\fBrebase\fR, the
\fBrebase\&.rescheduleFailedExec\fR
configuration (see
\fBgit-config\fR(1)
or "CONFIGURATION" below), or it defaults to false\&.
.sp
Recording this option for the whole rebase is a convenience feature\&. Otherwise an explicit
\fB\-\-no\-reschedule\-failed\-exec\fR
at the start would be overridden by the presence of a
\fBrebase\&.rescheduleFailedExec=true\fR
configuration when
\fBgit\fR
\fBrebase\fR
\fB\-\-continue\fR
is invoked\&. Currently, you cannot pass
\fB\-\-\fR[\fBno\-\fR]\fBreschedule\-failed\-exec\fR
to
\fBgit\fR
\fBrebase\fR
\fB\-\-continue\fR\&.
.RE
.PP
\-\-update\-refs, \-\-no\-update\-refs
.RS 4
Automatically force\-update any branches that point to commits that are being rebased\&. Any branches that are checked out in a worktree are not updated in this way\&.
.sp
If the configuration variable
\fBrebase\&.updateRefs\fR
is set, then this option can be used to override and disable this setting\&.
.sp
See also INCOMPATIBLE OPTIONS below\&.
.RE
.SH "INCOMPATIBLE OPTIONS"
.sp
The following options:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-apply
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-whitespace
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-C
.RE
.sp
are incompatible with the following options:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-merge
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-strategy
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-strategy\-option
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-autosquash
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-rebase\-merges
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-interactive
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-exec
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-no\-keep\-empty
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-empty=
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-[no\-]reapply\-cherry\-picks when used without \-\-keep\-base
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-update\-refs
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-root when used without \-\-onto
.RE
.sp
In addition, the following pairs of options are incompatible:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-keep\-base and \-\-onto
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-keep\-base and \-\-root
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-fork\-point and \-\-root
.RE
.SH "BEHAVIORAL DIFFERENCES"
.sp
\fBgit\fR \fBrebase\fR has two primary backends: \fIapply\fR and \fImerge\fR\&. (The \fIapply\fR backend used to be known as the \fIam\fR backend, but the name led to confusion as it looks like a verb instead of a noun\&. Also, the \fImerge\fR backend used to be known as the interactive backend, but it is now used for non\-interactive cases as well\&. Both were renamed based on lower\-level functionality that underpinned each\&.) There are some subtle differences in how these two backends behave:
.SS "Empty commits"
.sp
The \fIapply\fR backend unfortunately drops intentionally empty commits, i\&.e\&. commits that started empty, though these are rare in practice\&. It also drops commits that become empty and has no option for controlling this behavior\&.
.sp
The \fImerge\fR backend keeps intentionally empty commits by default (though with \fB\-i\fR they are marked as empty in the todo list editor, or they can be dropped automatically with \fB\-\-no\-keep\-empty\fR)\&.
.sp
Similar to the apply backend, by default the merge backend drops commits that become empty unless \fB\-i\fR/\fB\-\-interactive\fR is specified (in which case it stops and asks the user what to do)\&. The merge backend also has an \fB\-\-empty=\fR(\fBdrop\fR|\fBkeep\fR|\fBstop\fR) option for changing the behavior of handling commits that become empty\&.
.SS "Directory rename detection"
.sp
Due to the lack of accurate tree information (arising from constructing fake ancestors with the limited information available in patches), directory rename detection is disabled in the \fIapply\fR backend\&. Disabled directory rename detection means that if one side of history renames a directory and the other adds new files to the old directory, then the new files will be left behind in the old directory without any warning at the time of rebasing that you may want to move these files into the new directory\&.
.sp
Directory rename detection works with the \fImerge\fR backend to provide you warnings in such cases\&.
.SS "Context"
.sp
The \fIapply\fR backend works by creating a sequence of patches (by calling \fBformat\-patch\fR internally), and then applying the patches in sequence (calling \fBam\fR internally)\&. Patches are composed of multiple hunks, each with line numbers, a context region, and the actual changes\&. The line numbers have to be taken with some offset, since the other side will likely have inserted or deleted lines earlier in the file\&. The context region is meant to help find how to adjust the line numbers in order to apply the changes to the right lines\&. However, if multiple areas of the code have the same surrounding lines of context, the wrong one can be picked\&. There are real\-world cases where this has caused commits to be reapplied incorrectly with no conflicts reported\&. Setting \fBdiff\&.context\fR to a larger value may prevent such types of problems, but increases the chance of spurious conflicts (since it will require more lines of matching context to apply)\&.
.sp
The \fImerge\fR backend works with a full copy of each relevant file, insulating it from these types of problems\&.
.SS "Labelling of conflicts markers"
.sp
When there are content conflicts, the merge machinery tries to annotate each side\(cqs conflict markers with the commits where the content came from\&. Since the \fIapply\fR backend drops the original information about the rebased commits and their parents (and instead generates new fake commits based off limited information in the generated patches), those commits cannot be identified; instead it has to fall back to a commit summary\&. Also, when \fBmerge\&.conflictStyle\fR is set to \fBdiff3\fR or \fBzdiff3\fR, the \fIapply\fR backend will use "constructed merge base" to label the content from the merge base, and thus provide no information about the merge base commit whatsoever\&.
.sp
The \fImerge\fR backend works with the full commits on both sides of history and thus has no such limitations\&.
.SS "Hooks"
.sp
The \fIapply\fR backend has not traditionally called the post\-commit hook, while the \fImerge\fR backend has\&. Both have called the post\-checkout hook, though the \fImerge\fR backend has squelched its output\&. Further, both backends only call the post\-checkout hook with the starting point commit of the rebase, not the intermediate commits nor the final commit\&. In each case, the calling of these hooks was by accident of implementation rather than by design (both backends were originally implemented as shell scripts and happened to invoke other commands like \fBgit\fR \fBcheckout\fR or \fBgit\fR \fBcommit\fR that would call the hooks)\&. Both backends should have the same behavior, though it is not entirely clear which, if any, is correct\&. We will likely make rebase stop calling either of these hooks in the future\&.
.SS "Interruptability"
.sp
The \fIapply\fR backend has safety problems with an ill\-timed interrupt; if the user presses Ctrl\-C at the wrong time to try to abort the rebase, the rebase can enter a state where it cannot be aborted with a subsequent \fBgit\fR \fBrebase\fR \fB\-\-abort\fR\&. The \fImerge\fR backend does not appear to suffer from the same shortcoming\&. (See \m[blue]\fBhttps://lore\&.kernel\&.org/git/20200207132152\&.GC2868@szeder\&.dev/\fR\m[] for details\&.)
.SS "Commit Rewording"
.sp
When a conflict occurs while rebasing, rebase stops and asks the user to resolve\&. Since the user may need to make notable changes while resolving conflicts, after conflicts are resolved and the user has run \fBgit\fR \fBrebase\fR \fB\-\-continue\fR, the rebase should open an editor and ask the user to update the commit message\&. The \fImerge\fR backend does this, while the \fIapply\fR backend blindly applies the original commit message\&.
.SS "Miscellaneous differences"
.sp
There are a few more behavioral differences that most folks would probably consider inconsequential but which are mentioned for completeness:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Reflog: The two backends will use different wording when describing the changes made in the reflog, though both will make use of the word "rebase"\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Progress, informational, and error messages: The two backends provide slightly different progress and informational messages\&. Also, the apply backend writes error messages (such as "Your files would be overwritten\&...\:") to stdout, while the merge backend writes them to stderr\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
State directories: The two backends keep their state in different directories under \&.\fBgit/\fR
.RE
.SH "MERGE STRATEGIES"
.sp
The merge mechanism (\fBgit\fR \fBmerge\fR and \fBgit\fR \fBpull\fR commands) allows the backend \fImerge strategies\fR to be chosen with \fB\-s\fR option\&. Some strategies can also take their own options, which can be passed by giving \fB\-X\fR\fI<option>\fR arguments to \fBgit\fR \fBmerge\fR and/or \fBgit\fR \fBpull\fR\&.
.PP
\fBort\fR
.RS 4
This is the default merge strategy when pulling or merging one branch\&. This strategy can only resolve two heads using a 3\-way merge algorithm\&. When there is more than one common ancestor that can be used for 3\-way merge, it creates a merged tree of the common ancestors and uses that as the reference tree for the 3\-way merge\&. This has been reported to result in fewer merge conflicts without causing mismerges by tests done on actual merge commits taken from Linux 2\&.6 kernel development history\&. Additionally this strategy can detect and handle merges involving renames\&. It does not make use of detected copies\&. The name for this algorithm is an acronym ("Ostensibly Recursive\(cqs Twin") and came from the fact that it was written as a replacement for the previous default algorithm,
\fBrecursive\fR\&.
.sp
In the case where the path is a submodule, if the submodule commit used on one side of the merge is a descendant of the submodule commit used on the other side of the merge, Git attempts to fast\-forward to the descendant\&. Otherwise, Git will treat this case as a conflict, suggesting as a resolution a submodule commit that is descendant of the conflicting ones, if one exists\&.
.sp
The
\fBort\fR
strategy can take the following options:
.PP
\fBours\fR
.RS 4
This option forces conflicting hunks to be auto\-resolved cleanly by favoring
\fIour\fR
version\&. Changes from the other tree that do not conflict with our side are reflected in the merge result\&. For a binary file, the entire contents are taken from our side\&.
.sp
This should not be confused with the
\fBours\fR
merge strategy, which does not even look at what the other tree contains at all\&. It discards everything the other tree did, declaring
\fIour\fR
history contains all that happened in it\&.
.RE
.PP
\fBtheirs\fR
.RS 4
This is the opposite of
\fBours\fR; note that, unlike
\fBours\fR, there is no
\fBtheirs\fR
merge strategy to confuse this merge option with\&.
.RE
.PP
\fBignore\-space\-change\fR, \fBignore\-all\-space\fR, \fBignore\-space\-at\-eol\fR, \fBignore\-cr\-at\-eol\fR
.RS 4
Treats lines with the indicated type of whitespace change as unchanged for the sake of a three\-way merge\&. Whitespace changes mixed with other changes to a line are not ignored\&. See also
\fBgit-diff\fR(1)
\fB\-b\fR,
\fB\-w\fR,
\fB\-\-ignore\-space\-at\-eol\fR, and
\fB\-\-ignore\-cr\-at\-eol\fR\&.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
If
\fItheir\fR
version only introduces whitespace changes to a line,
\fIour\fR
version is used;
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
If
\fIour\fR
version introduces whitespace changes but
\fItheir\fR
version includes a substantial change,
\fItheir\fR
version is used;
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Otherwise, the merge proceeds in the usual way\&.
.RE
.RE
.PP
\fBrenormalize\fR
.RS 4
This runs a virtual check\-out and check\-in of all three stages of any file which needs a three\-way merge\&. This option is meant to be used when merging branches with different clean filters or end\-of\-line normalization rules\&. See "Merging branches with differing checkin/checkout attributes" in
\fBgitattributes\fR(5)
for details\&.
.RE
.PP
\fBno\-renormalize\fR
.RS 4
Disables the
\fBrenormalize\fR
option\&. This overrides the
\fBmerge\&.renormalize\fR
configuration variable\&.
.RE
.PP
\fBfind\-renames\fR[\fB=\fR\fI<n>\fR]
.RS 4
Turn on rename detection, optionally setting the similarity threshold\&. This is the default\&. This overrides the
\fBmerge\&.renames\fR
configuration variable\&. See also
\fBgit-diff\fR(1)
\fB\-\-find\-renames\fR\&.
.RE
.PP
\fBrename\-threshold=\fR\fI<n>\fR
.RS 4
Deprecated synonym for
\fBfind\-renames=\fR\fI<n>\fR\&.
.RE
.PP
\fBno\-renames\fR
.RS 4
Turn off rename detection\&. This overrides the
\fBmerge\&.renames\fR
configuration variable\&. See also
\fBgit-diff\fR(1)
\fB\-\-no\-renames\fR\&.
.RE
.PP
\fBhistogram\fR
.RS 4
Deprecated synonym for
\fBdiff\-algorithm=histogram\fR\&.
.RE
.PP
\fBpatience\fR
.RS 4
Deprecated synonym for
\fBdiff\-algorithm=patience\fR\&.
.RE
.PP
\fBdiff\-algorithm=\fR(\fBhistogram\fR|\fBminimal\fR|\fBmyers\fR|\fBpatience\fR)
.RS 4
Use a different diff algorithm while merging, which can help avoid mismerges that occur due to unimportant matching lines (such as braces from distinct functions)\&. See also
\fBgit-diff\fR(1)
\fB\-\-diff\-algorithm\fR\&. Note that
\fBort\fR
defaults to
\fBdiff\-algorithm=histogram\fR, while regular diffs currently default to the
\fBdiff\&.algorithm\fR
config setting\&.
.RE
.PP
\fBsubtree\fR[\fB=\fR\fI<path>\fR]
.RS 4
This option is a more advanced form of
\fIsubtree\fR
strategy, where the strategy makes a guess on how two trees must be shifted to match with each other when merging\&. Instead, the specified path is prefixed (or stripped from the beginning) to make the shape of two trees to match\&.
.RE
.RE
.PP
\fBrecursive\fR
.RS 4
This is now a synonym for
\fBort\fR\&. It was an alternative implementation until v2\&.49\&.0, but was redirected to mean
\fBort\fR
in v2\&.50\&.0\&. The previous recursive strategy was the default strategy for resolving two heads from Git v0\&.99\&.9k until v2\&.33\&.0\&.
.RE
.PP
\fBresolve\fR
.RS 4
This can only resolve two heads (i\&.e\&. the current branch and another branch you pulled from) using a 3\-way merge algorithm\&. It tries to carefully detect criss\-cross merge ambiguities\&. It does not handle renames\&.
.RE
.PP
\fBoctopus\fR
.RS 4
This resolves cases with more than two heads, but refuses to do a complex merge that needs manual resolution\&. It is primarily meant to be used for bundling topic branch heads together\&. This is the default merge strategy when pulling or merging more than one branch\&.
.RE
.PP
\fBours\fR
.RS 4
This resolves any number of heads, but the resulting tree of the merge is always that of the current branch head, effectively ignoring all changes from all other branches\&. It is meant to be used to supersede old development history of side branches\&. Note that this is different from the
\fB\-Xours\fR
option to the
\fBort\fR
merge strategy\&.
.RE
.PP
\fBsubtree\fR
.RS 4
This is a modified
\fBort\fR
strategy\&. When merging trees A and B, if B corresponds to a subtree of A, B is first adjusted to match the tree structure of A, instead of reading the trees at the same level\&. This adjustment is also done to the common ancestor tree\&.
.RE
.sp
With the strategies that use 3\-way merge (including the default, \fBort\fR), if a change is made on both branches, but later reverted on one of the branches, that change will be present in the merged result; some people find this behavior confusing\&. It occurs because only the heads and the merge base are considered when performing a merge, not the individual commits\&. The merge algorithm therefore considers the reverted change as no change at all, and substitutes the changed version instead\&.
.SH "NOTES"
.sp
You should understand the implications of using \fBgit\fR \fBrebase\fR on a repository that you share\&. See also RECOVERING FROM UPSTREAM REBASE below\&.
.sp
When the rebase is run, it will first execute a \fBpre\-rebase\fR hook if one exists\&. You can use this hook to do sanity checks and reject the rebase if it isn\(cqt appropriate\&. Please see the template \fBpre\-rebase\fR hook script for an example\&.
.sp
Upon completion, \fI<branch>\fR will be the current branch\&.
.SH "INTERACTIVE MODE"
.sp
Rebasing interactively means that you have a chance to edit the commits which are rebased\&. You can reorder the commits, and you can remove them (weeding out bad or otherwise unwanted patches)\&.
.sp
The interactive mode is meant for this type of workflow:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
have a wonderful idea
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
hack on the code
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
prepare a series for submission
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  4." 4.2
.\}
submit
.RE
.sp
where point 2\&. consists of several instances of
.sp
a) regular use
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
finish something worthy of a commit
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
commit
.RE
.sp
b) independent fixup
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
realize that something does not work
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
fix that
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  3." 4.2
.\}
commit it
.RE
.sp
Sometimes the thing fixed in b\&.2\&. cannot be amended to the not\-quite perfect commit it fixes, because that commit is buried deeply in a patch series\&. That is exactly what interactive rebase is for: use it after plenty of "a"s and "b"s, by rearranging and editing commits, and squashing multiple commits into one\&.
.sp
Start it with the last commit you want to retain as\-is:
.sp
.if n \{\
.RS 4
.\}
.nf
git rebase \-i <after\-this\-commit>
.fi
.if n \{\
.RE
.\}
.sp
An editor will be fired up with all the commits in your current branch (ignoring merge commits), which come after the given commit\&. You can reorder the commits in this list to your heart\(cqs content, and you can remove them\&. The list looks more or less like this:
.sp
.if n \{\
.RS 4
.\}
.nf
pick deadbee The oneline of this commit
pick fa1afe1 The oneline of the next commit
\&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
The oneline descriptions are purely for your pleasure; \fIgit rebase\fR will not look at them but at the commit names ("deadbee" and "fa1afe1" in this example), so do not delete or edit the names\&.
.sp
By replacing the command "pick" with the command "edit", you can tell \fBgit\fR \fBrebase\fR to stop after applying that commit, so that you can edit the files and/or the commit message, amend the commit, and continue rebasing\&.
.sp
To interrupt the rebase (just like an "edit" command would do, but without cherry\-picking any commit first), use the "break" command\&.
.sp
If you just want to edit the commit message for a commit, replace the command "pick" with the command "reword"\&.
.sp
To drop a commit, replace the command "pick" with "drop", or just delete the matching line\&.
.sp
If you want to fold two or more commits into one, replace the command "pick" for the second and subsequent commits with "squash" or "fixup"\&. If the commits had different authors, the folded commit will be attributed to the author of the first commit\&. The suggested commit message for the folded commit is the concatenation of the first commit\(cqs message with those identified by "squash" commands, omitting the messages of commits identified by "fixup" commands, unless "fixup \-c" is used\&. In that case the suggested commit message is only the message of the "fixup \-c" commit, and an editor is opened allowing you to edit the message\&. The contents (patch) of the "fixup \-c" commit are still incorporated into the folded commit\&. If there is more than one "fixup \-c" commit, the message from the final one is used\&. You can also use "fixup \-C" to get the same behavior as "fixup \-c" except without opening an editor\&.
.sp
\fBgit\fR \fBrebase\fR will stop when "pick" has been replaced with "edit" or when a command fails due to merge errors\&. When you are done editing and/or resolving conflicts you can continue with \fBgit\fR \fBrebase\fR \fB\-\-continue\fR\&.
.sp
For example, if you want to reorder the last 5 commits, such that what was \fBHEAD~4\fR becomes the new \fBHEAD\fR\&. To achieve that, you would call \fBgit\fR \fBrebase\fR like this:
.sp
.if n \{\
.RS 4
.\}
.nf
$ git rebase \-i HEAD~5
.fi
.if n \{\
.RE
.\}
.sp
And move the first patch to the end of the list\&.
.sp
You might want to recreate merge commits, e\&.g\&. if you have a history like this:
.sp
.if n \{\
.RS 4
.\}
.nf
           X
            \e
         A\-\-\-M\-\-\-B
        /
\-\-\-o\-\-\-O\-\-\-P\-\-\-Q
.fi
.if n \{\
.RE
.\}
.sp
Suppose you want to rebase the side branch starting at "A" to "Q"\&. Make sure that the current \fBHEAD\fR is "B", and call
.sp
.if n \{\
.RS 4
.\}
.nf
$ git rebase \-i \-r \-\-onto Q O
.fi
.if n \{\
.RE
.\}
.sp
Reordering and editing commits usually creates untested intermediate steps\&. You may want to check that your history editing did not break anything by running a test, or at least recompiling at intermediate points in history by using the "exec" command (shortcut "x")\&. You may do so by creating a todo list like this one:
.sp
.if n \{\
.RS 4
.\}
.nf
pick deadbee Implement feature XXX
fixup f1a5c00 Fix to feature XXX
exec make
pick c0ffeee The oneline of the next commit
edit deadbab The oneline of the commit after
exec cd subdir; make test
\&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
The interactive rebase will stop when a command fails (i\&.e\&. exits with non\-0 status) to give you an opportunity to fix the problem\&. You can continue with \fBgit\fR \fBrebase\fR \fB\-\-continue\fR\&.
.sp
The "exec" command launches the command in a shell (the default one, usually /bin/sh), so you can use shell features (like "cd", ">", ";" \&...\:)\&. The command is run from the root of the working tree\&.
.sp
.if n \{\
.RS 4
.\}
.nf
$ git rebase \-i \-\-exec "make test"
.fi
.if n \{\
.RE
.\}
.sp
This command lets you check that intermediate commits are compilable\&. The todo list becomes like that:
.sp
.if n \{\
.RS 4
.\}
.nf
pick 5928aea one
exec make test
pick 04d0fda two
exec make test
pick ba46169 three
exec make test
pick f4593f9 four
exec make test
.fi
.if n \{\
.RE
.\}
.SH "SPLITTING COMMITS"
.sp
In interactive mode, you can mark commits with the action "edit"\&. However, this does not necessarily mean that \fBgit\fR \fBrebase\fR expects the result of this edit to be exactly one commit\&. Indeed, you can undo the commit, or you can add other commits\&. This can be used to split a commit into two:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Start an interactive rebase with
\fBgit\fR
\fBrebase\fR
\fB\-i\fR
\fI<commit>\fR\fB^\fR, where
\fI<commit>\fR
is the commit you want to split\&. In fact, any commit range will do, as long as it contains that commit\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Mark the commit you want to split with the action "edit"\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
When it comes to editing that commit, execute
\fBgit\fR
\fBreset\fR
\fBHEAD^\fR\&. The effect is that the
\fBHEAD\fR
is rewound by one, and the index follows suit\&. However, the working tree stays the same\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Now add the changes to the index that you want to have in the first commit\&. You can use
\fBgit\fR
\fBadd\fR
(possibly interactively) or
\fBgit\fR
\fBgui\fR
(or both) to do that\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Commit the now\-current index with whatever commit message is appropriate now\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Repeat the last two steps until your working tree is clean\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Continue the rebase with
\fBgit\fR
\fBrebase\fR
\fB\-\-continue\fR\&.
.RE
.sp
If you are not absolutely sure that the intermediate revisions are consistent (they compile, pass the testsuite, etc\&.) you should use \fBgit\fR \fBstash\fR to stash away the not\-yet\-committed changes after each commit, test, and amend the commit if fixes are necessary\&.
.SH "RECOVERING FROM UPSTREAM REBASE"
.sp
Rebasing (or any other form of rewriting) a branch that others have based work on is a bad idea: anyone downstream of it is forced to manually fix their history\&. This section explains how to do the fix from the downstream\(cqs point of view\&. The real fix, however, would be to avoid rebasing the upstream in the first place\&.
.sp
To illustrate, suppose you are in a situation where someone develops a \fIsubsystem\fR branch, and you are working on a \fItopic\fR that is dependent on this \fIsubsystem\fR\&. You might end up with a history like the following:
.sp
.if n \{\
.RS 4
.\}
.nf
    o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o  master
         \e
          o\-\-\-o\-\-\-o\-\-\-o\-\-\-o  subsystem
                           \e
                            *\-\-\-*\-\-\-*  topic
.fi
.if n \{\
.RE
.\}
.sp
If \fIsubsystem\fR is rebased against \fImaster\fR, the following happens:
.sp
.if n \{\
.RS 4
.\}
.nf
    o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o  master
         \e                       \e
          o\-\-\-o\-\-\-o\-\-\-o\-\-\-o       o\*(Aq\-\-o\*(Aq\-\-o\*(Aq\-\-o\*(Aq\-\-o\*(Aq  subsystem
                           \e
                            *\-\-\-*\-\-\-*  topic
.fi
.if n \{\
.RE
.\}
.sp
If you now continue development as usual, and eventually merge \fItopic\fR to \fIsubsystem\fR, the commits from \fIsubsystem\fR will remain duplicated forever:
.sp
.if n \{\
.RS 4
.\}
.nf
    o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o  master
         \e                       \e
          o\-\-\-o\-\-\-o\-\-\-o\-\-\-o       o\*(Aq\-\-o\*(Aq\-\-o\*(Aq\-\-o\*(Aq\-\-o\*(Aq\-\-M  subsystem
                           \e                         /
                            *\-\-\-*\-\-\-*\-\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\-*\-\-*  topic
.fi
.if n \{\
.RE
.\}
.sp
Such duplicates are generally frowned upon because they clutter up history, making it harder to follow\&. To clean things up, you need to transplant the commits on \fItopic\fR to the new \fIsubsystem\fR tip, i\&.e\&., rebase \fItopic\fR\&. This becomes a ripple effect: anyone downstream from \fItopic\fR is forced to rebase too, and so on!
.sp
There are two kinds of fixes, discussed in the following subsections:
.PP
Easy case: The changes are literally the same\&.
.RS 4
This happens if the
\fIsubsystem\fR
rebase was a simple rebase and had no conflicts\&.
.RE
.PP
Hard case: The changes are not the same\&.
.RS 4
This happens if the
\fIsubsystem\fR
rebase had conflicts, or used
\fB\-\-interactive\fR
to omit, edit, squash, or fixup commits; or if the upstream used one of
\fBcommit\fR
\fB\-\-amend\fR,
\fBreset\fR, or a full history rewriting command like
\m[blue]\fB\fBfilter\-repo\fR\fR\m[]\&\s-2\u[2]\d\s+2\&.
.RE
.SS "The easy case"
.sp
Only works if the changes (patch IDs based on the diff contents) on \fIsubsystem\fR are literally the same before and after the rebase \fIsubsystem\fR did\&.
.sp
In that case, the fix is easy because \fIgit rebase\fR knows to skip changes that are already present in the new upstream (unless \fB\-\-reapply\-cherry\-picks\fR is given)\&. So if you say (assuming you\(cqre on \fItopic\fR)
.sp
.if n \{\
.RS 4
.\}
.nf
    $ git rebase subsystem
.fi
.if n \{\
.RE
.\}
.sp
you will end up with the fixed history
.sp
.if n \{\
.RS 4
.\}
.nf
    o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o\-\-\-o  master
                                 \e
                                  o\*(Aq\-\-o\*(Aq\-\-o\*(Aq\-\-o\*(Aq\-\-o\*(Aq  subsystem
                                                   \e
                                                    *\-\-\-*\-\-\-*  topic
.fi
.if n \{\
.RE
.\}
.SS "The hard case"
.sp
Things get more complicated if the \fIsubsystem\fR changes do not exactly correspond to the ones before the rebase\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBNote\fR
.ps -1
.br
.sp
While an "easy case recovery" sometimes appears to be successful even in the hard case, it may have unintended consequences\&. For example, a commit that was removed via \fBgit\fR \fBrebase\fR \fB\-\-interactive\fR will be \fBresurrected\fR!
.sp .5v
.RE
.sp
The idea is to manually tell \fBgit\fR \fBrebase\fR "where the old \fIsubsystem\fR ended and your \fItopic\fR began", that is, what the old merge base between them was\&. You will have to find a way to name the last commit of the old \fIsubsystem\fR, for example:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
With the
\fIsubsystem\fR
reflog: after
\fBgit\fR
\fBfetch\fR, the old tip of
\fIsubsystem\fR
is at
\fBsubsystem@\fR{1}\&. Subsequent fetches will increase the number\&. (See
\fBgit-reflog\fR(1)\&.)
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Relative to the tip of
\fItopic\fR: knowing that your
\fItopic\fR
has three commits, the old tip of
\fIsubsystem\fR
must be
\fBtopic~3\fR\&.
.RE
.sp
You can then transplant the old \fBsubsystem\fR\fB\&.\&.\fR\fBtopic\fR to the new tip by saying (for the reflog case, and assuming you are on \fItopic\fR already):
.sp
.if n \{\
.RS 4
.\}
.nf
    $ git rebase \-\-onto subsystem subsystem@{1}
.fi
.if n \{\
.RE
.\}
.sp
The ripple effect of a "hard case" recovery is especially bad: \fIeveryone\fR downstream from \fItopic\fR will now have to perform a "hard case" recovery too!
.SH "REBASING MERGES"
.sp
The interactive rebase command was originally designed to handle individual patch series\&. As such, it makes sense to exclude merge commits from the todo list, as the developer may have merged the then\-current \fBmaster\fR while working on the branch, only to rebase all the commits onto \fBmaster\fR eventually (skipping the merge commits)\&.
.sp
However, there are legitimate reasons why a developer may want to recreate merge commits: to keep the branch structure (or "commit topology") when working on multiple, inter\-related branches\&.
.sp
In the following example, the developer works on a topic branch that refactors the way buttons are defined, and on another topic branch that uses that refactoring to implement a "Report a bug" button\&. The output of \fBgit\fR \fBlog\fR \fB\-\-graph\fR \fB\-\-format=%s\fR \fB\-5\fR may look like this:
.sp
.if n \{\
.RS 4
.\}
.nf
*   Merge branch \*(Aqreport\-a\-bug\*(Aq
|\e
| * Add the feedback button
* | Merge branch \*(Aqrefactor\-button\*(Aq
|\e \e
| |/
| * Use the Button class for all buttons
| * Extract a generic Button class from the DownloadButton one
.fi
.if n \{\
.RE
.\}
.sp
The developer might want to rebase those commits to a newer \fBmaster\fR while keeping the branch topology, for example when the first topic branch is expected to be integrated into \fBmaster\fR much earlier than the second one, say, to resolve merge conflicts with changes to the DownloadButton class that made it into \fBmaster\fR\&.
.sp
This rebase can be performed using the \fB\-\-rebase\-merges\fR option\&. It will generate a todo list looking like this:
.sp
.if n \{\
.RS 4
.\}
.nf
label onto

# Branch: refactor\-button
reset onto
pick 123456 Extract a generic Button class from the DownloadButton one
pick 654321 Use the Button class for all buttons
label refactor\-button

# Branch: report\-a\-bug
reset refactor\-button # Use the Button class for all buttons
pick abcdef Add the feedback button
label report\-a\-bug

reset onto
merge \-C a1b2c3 refactor\-button # Merge \*(Aqrefactor\-button\*(Aq
merge \-C 6f5e4d report\-a\-bug # Merge \*(Aqreport\-a\-bug\*(Aq
.fi
.if n \{\
.RE
.\}
.sp
In contrast to a regular interactive rebase, there are \fBlabel\fR, \fBreset\fR and \fBmerge\fR commands in addition to \fBpick\fR ones\&.
.sp
The \fBlabel\fR command associates a label with the current HEAD when that command is executed\&. These labels are created as worktree\-local refs (\fBrefs/rewritten/\fR\fI<label>\fR) that will be deleted when the rebase finishes\&. That way, rebase operations in multiple worktrees linked to the same repository do not interfere with one another\&. If the \fBlabel\fR command fails, it is rescheduled immediately, with a helpful message how to proceed\&.
.sp
The \fBreset\fR command resets the HEAD, index and worktree to the specified revision\&. It is similar to an \fBexec\fR \fBgit\fR \fBreset\fR \fB\-\-hard\fR \fI<label>\fR, but refuses to overwrite untracked files\&. If the \fBreset\fR command fails, it is rescheduled immediately, with a helpful message how to edit the todo list (this typically happens when a \fBreset\fR command was inserted into the todo list manually and contains a typo)\&.
.sp
The \fBmerge\fR command will merge the specified revision(s) into whatever is HEAD at that time\&. With \fB\-C\fR \fI<original\-commit>\fR, the commit message of the specified merge commit will be used\&. When the \fB\-C\fR is changed to a lower\-case \fB\-c\fR, the message will be opened in an editor after a successful merge so that the user can edit the message\&.
.sp
If a \fBmerge\fR command fails for any reason other than merge conflicts (i\&.e\&. when the merge operation did not even start), it is rescheduled immediately\&.
.sp
By default, the \fBmerge\fR command will use the \fBort\fR merge strategy for regular merges, and \fBoctopus\fR for octopus merges\&. One can specify a default strategy for all merges using the \fB\-\-strategy\fR argument when invoking rebase, or can override specific merges in the interactive list of commands by using an \fBexec\fR command to call \fBgit\fR \fBmerge\fR explicitly with a \fB\-\-strategy\fR argument\&. Note that when calling \fBgit\fR \fBmerge\fR explicitly like this, you can make use of the fact that the labels are worktree\-local refs (the ref \fBrefs/rewritten/onto\fR would correspond to the label \fBonto\fR, for example) in order to refer to the branches you want to merge\&.
.sp
Note: the first command (\fBlabel\fR \fBonto\fR) labels the revision onto which the commits are rebased; The name \fBonto\fR is just a convention, as a nod to the \fB\-\-onto\fR option\&.
.sp
It is also possible to introduce completely new merge commits from scratch by adding a command of the form \fBmerge\fR \fI<merge\-head>\fR\&. This form will generate a tentative commit message and always open an editor to let the user edit it\&. This can be useful e\&.g\&. when a topic branch turns out to address more than a single concern and wants to be split into two or even more topic branches\&. Consider this todo list:
.sp
.if n \{\
.RS 4
.\}
.nf
pick 192837 Switch from GNU Makefiles to CMake
pick 5a6c7e Document the switch to CMake
pick 918273 Fix detection of OpenSSL in CMake
pick afbecd http: add support for TLS v1\&.3
pick fdbaec Fix detection of cURL in CMake on Windows
.fi
.if n \{\
.RE
.\}
.sp
The one commit in this list that is not related to CMake may very well have been motivated by working on fixing all those bugs introduced by switching to CMake, but it addresses a different concern\&. To split this branch into two topic branches, the todo list could be edited like this:
.sp
.if n \{\
.RS 4
.\}
.nf
label onto

pick afbecd http: add support for TLS v1\&.3
label tlsv1\&.3

reset onto
pick 192837 Switch from GNU Makefiles to CMake
pick 918273 Fix detection of OpenSSL in CMake
pick fdbaec Fix detection of cURL in CMake on Windows
pick 5a6c7e Document the switch to CMake
label cmake

reset onto
merge tlsv1\&.3
merge cmake
.fi
.if n \{\
.RE
.\}
.SH "CONFIGURATION"
.sp
Everything below this line in this section is selectively included from the \fBgit-config\fR(1) documentation\&. The content is the same as what\(cqs found there:
.PP
rebase\&.backend
.RS 4
Default backend to use for rebasing\&. Possible choices are
\fIapply\fR
or
\fImerge\fR\&. In the future, if the merge backend gains all remaining capabilities of the apply backend, this setting may become unused\&.
.RE
.PP
rebase\&.stat
.RS 4
Whether to show a diffstat of what changed upstream since the last rebase\&. False by default\&.
.RE
.PP
rebase\&.autoSquash
.RS 4
If set to true, enable the
\fB\-\-autosquash\fR
option of
\fBgit-rebase\fR(1)
by default for interactive mode\&. This can be overridden with the
\fB\-\-no\-autosquash\fR
option\&.
.RE
.PP
rebase\&.autoStash
.RS 4
When set to true, automatically create a temporary stash entry before the operation begins, and apply it after the operation ends\&. This means that you can run rebase on a dirty worktree\&. However, use with care: the final stash application after a successful rebase might result in non\-trivial conflicts\&. This option can be overridden by the
\fB\-\-no\-autostash\fR
and
\fB\-\-autostash\fR
options of
\fBgit-rebase\fR(1)\&. Defaults to false\&.
.RE
.PP
rebase\&.updateRefs
.RS 4
If set to true enable
\fB\-\-update\-refs\fR
option by default\&.
.RE
.PP
rebase\&.missingCommitsCheck
.RS 4
If set to "warn", git rebase \-i will print a warning if some commits are removed (e\&.g\&. a line was deleted), however the rebase will still proceed\&. If set to "error", it will print the previous warning and stop the rebase,
\fIgit rebase \-\-edit\-todo\fR
can then be used to correct the error\&. If set to "ignore", no checking is done\&. To drop a commit without warning or error, use the
\fBdrop\fR
command in the todo list\&. Defaults to "ignore"\&.
.RE
.PP
rebase\&.instructionFormat
.RS 4
A format string, as specified in
\fBgit-log\fR(1), to be used for the todo list during an interactive rebase\&. The format will automatically have the commit hash prepended to the format\&.
.RE
.PP
rebase\&.abbreviateCommands
.RS 4
If set to true,
\fBgit\fR
\fBrebase\fR
will use abbreviated command names in the todo list resulting in something like this:
.sp
.if n \{\
.RS 4
.\}
.nf
        p deadbee The oneline of the commit
        p fa1afe1 The oneline of the next commit
        \&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
instead of:
.sp
.if n \{\
.RS 4
.\}
.nf
        pick deadbee The oneline of the commit
        pick fa1afe1 The oneline of the next commit
        \&.\&.\&.
.fi
.if n \{\
.RE
.\}
.sp
Defaults to false\&.
.RE
.PP
rebase\&.rescheduleFailedExec
.RS 4
Automatically reschedule
\fBexec\fR
commands that failed\&. This only makes sense in interactive mode (or when an
\fB\-\-exec\fR
option was provided)\&. This is the same as specifying the
\fB\-\-reschedule\-failed\-exec\fR
option\&.
.RE
.PP
rebase\&.forkPoint
.RS 4
If set to false set
\fB\-\-no\-fork\-point\fR
option by default\&.
.RE
.PP
rebase\&.rebaseMerges
.RS 4
Whether and how to set the
\fB\-\-rebase\-merges\fR
option by default\&. Can be
\fBrebase\-cousins\fR,
\fBno\-rebase\-cousins\fR, or a boolean\&. Setting to true or to
\fBno\-rebase\-cousins\fR
is equivalent to
\fB\-\-rebase\-merges=no\-rebase\-cousins\fR, setting to
\fBrebase\-cousins\fR
is equivalent to
\fB\-\-rebase\-merges=rebase\-cousins\fR, and setting to false is equivalent to
\fB\-\-no\-rebase\-merges\fR\&. Passing
\fB\-\-rebase\-merges\fR
on the command line, with or without an argument, overrides any
\fBrebase\&.rebaseMerges\fR
configuration\&.
.RE
.PP
rebase\&.maxLabelLength
.RS 4
When generating label names from commit subjects, truncate the names to this length\&. By default, the names are truncated to a little less than
\fBNAME_MAX\fR
(to allow e\&.g\&. \&.\fBlock\fR
files to be written for the corresponding loose refs)\&.
.RE
.PP
sequence\&.editor
.RS 4
Text editor used by
\fBgit\fR
\fBrebase\fR
\fB\-i\fR
for editing the rebase instruction file\&. The value is meant to be interpreted by the shell when it is used\&. It can be overridden by the
\fBGIT_SEQUENCE_EDITOR\fR
environment variable\&. When not configured, the default commit message editor is used instead\&.
.RE
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite
.SH "NOTES"
.IP " 1." 4
revert-a-faulty-merge How-To
.RS 4
\%git-htmldocs/howto/revert-a-faulty-merge.html
.RE
.IP " 2." 4
\fBfilter-repo\fR
.RS 4
\%https://github.com/newren/git-filter-repo
.RE
