Home Explore Blog CI



git

1st chunk of `Documentation/git-rebase.adoc`
fdd3a9e35f65b31d209631a0173e8551e7a9a3bb120721e30000000100000fa2
git-rebase(1)
=============

NAME
----
git-rebase - Reapply commits on top of another base tip

SYNOPSIS
--------
[verse]
'git rebase' [-i | --interactive] [<options>] [--exec <cmd>]
	[--onto <newbase> | --keep-base] [<upstream> [<branch>]]
'git rebase' [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
	--root [<branch>]
'git rebase' (--continue|--skip|--abort|--quit|--edit-todo|--show-current-patch)

DESCRIPTION
-----------
If `<branch>` is specified, `git rebase` will perform an automatic
`git switch <branch>` before doing anything else.  Otherwise
it remains on the current branch.

If `<upstream>` is not specified, the upstream configured in
`branch.<name>.remote` and `branch.<name>.merge` options will be used (see
linkgit:git-config[1] for details) and the `--fork-point` 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.

All changes made by commits in the current branch but that are not
in `<upstream>` are saved to a temporary area.  This is the same set
of commits that would be shown by `git log <upstream>..HEAD`; or by
`git log 'fork_point'..HEAD`, if `--fork-point` is active (see the
description on `--fork-point` below); or by `git log HEAD`, if the
`--root` option is specified.

The current branch is reset to `<upstream>` or `<newbase>` if the
`--onto` option was supplied.  This has the exact same effect as
`git reset --hard <upstream>` (or `<newbase>`). `ORIG_HEAD` is set
to point at the tip of the branch before the reset.

[NOTE]
`ORIG_HEAD` 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. `git reset`) are used during the rebase. The previous branch tip,
however, is accessible using the reflog of the current branch
(i.e. `@{1}`, see linkgit:gitrevisions[7]).

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 `HEAD` which introduce the same textual changes as a commit
in `HEAD..<upstream>` are omitted (i.e., a patch already accepted upstream
with a different commit message or timestamp will be skipped).

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 `git rebase --continue`.  Another option is to bypass the commit
that caused the merge failure with `git rebase --skip`.  To check out the
original `<branch>` and remove the `.git/rebase-apply` working files, use
the command `git rebase --abort` instead.

Assume the following history exists and the current branch is "topic":

------------
          A---B---C topic
         /
    D---E---F---G master
------------

From this point, the result of either of the following commands:


    git rebase master
    git rebase master topic

would be:

------------
                  A'--B'--C' topic
                 /
    D---E---F---G master
------------

*NOTE:* The latter form is just a short-hand of `git checkout topic`
followed by `git rebase master`. When rebase exits `topic` will
remain the checked-out branch.

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 'merge' backend is
used).  For example, running `git rebase master` on the following
history (in which `A'` and `A` introduce the same set of changes, but
have different committer information):

------------
          A---B---C topic
         /
    D---E---A'---F master
------------

will result in:

------------
                   B'---C' topic
                  /
    D---E---A'---F master
------------

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 `rebase --onto`.

First let's

Title: Git Rebase Command
Summary
The git-rebase command is used to reapply commits on top of another base tip, allowing users to transplant a topic branch based on one branch to another and to pretend that the topic branch was forked from the latter branch.