Documentation / git-rebase.txton commit dateformat: parse %(xxdate) %(yydate:format) correctly (070f691)
   1git-rebase(1)
   2=============
   3
   4NAME
   5----
   6git-rebase - Forward-port local commits to the updated upstream head
   7
   8SYNOPSIS
   9--------
  10[verse]
  11'git-rebase' [-i | --interactive] [-v | --verbose] [-m | --merge]
  12        [-C<n>] [ --whitespace=<option>] [-p | --preserve-merges]
  13        [--onto <newbase>] <upstream> [<branch>]
  14'git-rebase' --continue | --skip | --abort
  15
  16DESCRIPTION
  17-----------
  18If <branch> is specified, git-rebase will perform an automatic
  19`git checkout <branch>` before doing anything else.  Otherwise
  20it remains on the current branch.
  21
  22All changes made by commits in the current branch but that are not
  23in <upstream> are saved to a temporary area.  This is the same set
  24of commits that would be shown by `git log <upstream>..HEAD`.
  25
  26The current branch is reset to <upstream>, or <newbase> if the
  27--onto option was supplied.  This has the exact same effect as
  28`git reset --hard <upstream>` (or <newbase>).
  29
  30The commits that were previously saved into the temporary area are
  31then reapplied to the current branch, one by one, in order.
  32
  33It is possible that a merge failure will prevent this process from being
  34completely automatic.  You will have to resolve any such merge failure
  35and run `git rebase --continue`.  Another option is to bypass the commit
  36that caused the merge failure with `git rebase --skip`.  To restore the
  37original <branch> and remove the .dotest working files, use the command
  38`git rebase --abort` instead.
  39
  40Assume the following history exists and the current branch is "topic":
  41
  42------------
  43          A---B---C topic
  44         /
  45    D---E---F---G master
  46------------
  47
  48From this point, the result of either of the following commands:
  49
  50
  51    git-rebase master
  52    git-rebase master topic
  53
  54would be:
  55
  56------------
  57                  A'--B'--C' topic
  58                 /
  59    D---E---F---G master
  60------------
  61
  62The latter form is just a short-hand of `git checkout topic`
  63followed by `git rebase master`.
  64
  65Here is how you would transplant a topic branch based on one
  66branch to another, to pretend that you forked the topic branch
  67from the latter branch, using `rebase --onto`.
  68
  69First let's assume your 'topic' is based on branch 'next'.
  70For example feature developed in 'topic' depends on some
  71functionality which is found in 'next'.
  72
  73------------
  74    o---o---o---o---o  master
  75         \
  76          o---o---o---o---o  next
  77                           \
  78                            o---o---o  topic
  79------------
  80
  81We would want to make 'topic' forked from branch 'master',
  82for example because the functionality 'topic' branch depend on
  83got merged into more stable 'master' branch, like this:
  84
  85------------
  86    o---o---o---o---o  master
  87        |            \
  88        |             o'--o'--o'  topic
  89         \
  90          o---o---o---o---o  next
  91------------
  92
  93We can get this using the following command:
  94
  95    git-rebase --onto master next topic
  96
  97
  98Another example of --onto option is to rebase part of a
  99branch.  If we have the following situation:
 100
 101------------
 102                            H---I---J topicB
 103                           /
 104                  E---F---G  topicA
 105                 /
 106    A---B---C---D  master
 107------------
 108
 109then the command
 110
 111    git-rebase --onto master topicA topicB
 112
 113would result in:
 114
 115------------
 116                 H'--I'--J'  topicB
 117                /
 118                | E---F---G  topicA
 119                |/
 120    A---B---C---D  master
 121------------
 122
 123This is useful when topicB does not depend on topicA.
 124
 125A range of commits could also be removed with rebase.  If we have
 126the following situation:
 127
 128------------
 129    E---F---G---H---I---J  topicA
 130------------
 131
 132then the command
 133
 134    git-rebase --onto topicA~5 topicA~3 topicA
 135
 136would result in the removal of commits F and G:
 137
 138------------
 139    E---H'---I'---J'  topicA
 140------------
 141
 142This is useful if F and G were flawed in some way, or should not be
 143part of topicA.  Note that the argument to --onto and the <upstream>
 144parameter can be any valid commit-ish.
 145
 146In case of conflict, git-rebase will stop at the first problematic commit
 147and leave conflict markers in the tree.  You can use git diff to locate
 148the markers (<<<<<<) and make edits to resolve the conflict.  For each
 149file you edit, you need to tell git that the conflict has been resolved,
 150typically this would be done with
 151
 152
 153    git add <filename>
 154
 155
 156After resolving the conflict manually and updating the index with the
 157desired resolution, you can continue the rebasing process with
 158
 159
 160    git rebase --continue
 161
 162
 163Alternatively, you can undo the git-rebase with
 164
 165
 166    git rebase --abort
 167
 168OPTIONS
 169-------
 170<newbase>::
 171        Starting point at which to create the new commits. If the
 172        --onto option is not specified, the starting point is
 173        <upstream>.  May be any valid commit, and not just an
 174        existing branch name.
 175
 176<upstream>::
 177        Upstream branch to compare against.  May be any valid commit,
 178        not just an existing branch name.
 179
 180<branch>::
 181        Working branch; defaults to HEAD.
 182
 183--continue::
 184        Restart the rebasing process after having resolved a merge conflict.
 185
 186--abort::
 187        Restore the original branch and abort the rebase operation.
 188
 189--skip::
 190        Restart the rebasing process by skipping the current patch.
 191
 192-m, \--merge::
 193        Use merging strategies to rebase.  When the recursive (default) merge
 194        strategy is used, this allows rebase to be aware of renames on the
 195        upstream side.
 196
 197-s <strategy>, \--strategy=<strategy>::
 198        Use the given merge strategy; can be supplied more than
 199        once to specify them in the order they should be tried.
 200        If there is no `-s` option, a built-in list of strategies
 201        is used instead (`git-merge-recursive` when merging a single
 202        head, `git-merge-octopus` otherwise).  This implies --merge.
 203
 204-v, \--verbose::
 205        Display a diffstat of what changed upstream since the last rebase.
 206
 207-C<n>::
 208        Ensure at least <n> lines of surrounding context match before
 209        and after each change.  When fewer lines of surrounding
 210        context exist they all must match.  By default no context is
 211        ever ignored.
 212
 213--whitespace=<nowarn|warn|error|error-all|strip>::
 214        This flag is passed to the `git-apply` program
 215        (see gitlink:git-apply[1]) that applies the patch.
 216
 217-i, \--interactive::
 218        Make a list of the commits which are about to be rebased.  Let the
 219        user edit that list before rebasing.  This mode can also be used to
 220        split commits (see SPLITTING COMMITS below).
 221
 222-p, \--preserve-merges::
 223        Instead of ignoring merges, try to recreate them.  This option
 224        only works in interactive mode.
 225
 226include::merge-strategies.txt[]
 227
 228NOTES
 229-----
 230When you rebase a branch, you are changing its history in a way that
 231will cause problems for anyone who already has a copy of the branch
 232in their repository and tries to pull updates from you.  You should
 233understand the implications of using 'git rebase' on a repository that
 234you share.
 235
 236When the git rebase command is run, it will first execute a "pre-rebase"
 237hook if one exists.  You can use this hook to do sanity checks and
 238reject the rebase if it isn't appropriate.  Please see the template
 239pre-rebase hook script for an example.
 240
 241You must be in the top directory of your project to start (or continue)
 242a rebase.  Upon completion, <branch> will be the current branch.
 243
 244INTERACTIVE MODE
 245----------------
 246
 247Rebasing interactively means that you have a chance to edit the commits
 248which are rebased.  You can reorder the commits, and you can
 249remove them (weeding out bad or otherwise unwanted patches).
 250
 251The interactive mode is meant for this type of workflow:
 252
 2531. have a wonderful idea
 2542. hack on the code
 2553. prepare a series for submission
 2564. submit
 257
 258where point 2. consists of several instances of
 259
 260a. regular use
 261 1. finish something worthy of a commit
 262 2. commit
 263b. independent fixup
 264 1. realize that something does not work
 265 2. fix that
 266 3. commit it
 267
 268Sometimes the thing fixed in b.2. cannot be amended to the not-quite
 269perfect commit it fixes, because that commit is buried deeply in a
 270patch series.  That is exactly what interactive rebase is for: use it
 271after plenty of "a"s and "b"s, by rearranging and editing
 272commits, and squashing multiple commits into one.
 273
 274Start it with the last commit you want to retain as-is:
 275
 276        git rebase -i <after-this-commit>
 277
 278An editor will be fired up with all the commits in your current branch
 279(ignoring merge commits), which come after the given commit.  You can
 280reorder the commits in this list to your heart's content, and you can
 281remove them.  The list looks more or less like this:
 282
 283-------------------------------------------
 284pick deadbee The oneline of this commit
 285pick fa1afe1 The oneline of the next commit
 286...
 287-------------------------------------------
 288
 289The oneline descriptions are purely for your pleasure; `git-rebase` will
 290not look at them but at the commit names ("deadbee" and "fa1afe1" in this
 291example), so do not delete or edit the names.
 292
 293By replacing the command "pick" with the command "edit", you can tell
 294`git-rebase` to stop after applying that commit, so that you can edit
 295the files and/or the commit message, amend the commit, and continue
 296rebasing.
 297
 298If you want to fold two or more commits into one, replace the command
 299"pick" with "squash" for the second and subsequent commit.  If the
 300commits had different authors, it will attribute the squashed commit to
 301the author of the last commit.
 302
 303In both cases, or when a "pick" does not succeed (because of merge
 304errors), the loop will stop to let you fix things, and you can continue
 305the loop with `git rebase --continue`.
 306
 307For example, if you want to reorder the last 5 commits, such that what
 308was HEAD~4 becomes the new HEAD. To achieve that, you would call
 309`git-rebase` like this:
 310
 311----------------------
 312$ git rebase -i HEAD~5
 313----------------------
 314
 315And move the first patch to the end of the list.
 316
 317You might want to preserve merges, if you have a history like this:
 318
 319------------------
 320           X
 321            \
 322         A---M---B
 323        /
 324---o---O---P---Q
 325------------------
 326
 327Suppose you want to rebase the side branch starting at "A" to "Q". Make
 328sure that the current HEAD is "B", and call
 329
 330-----------------------------
 331$ git rebase -i -p --onto Q O
 332-----------------------------
 333
 334
 335SPLITTING COMMITS
 336-----------------
 337
 338In interactive mode, you can mark commits with the action "edit".  However,
 339this does not necessarily mean that 'git rebase' expects the result of this
 340edit to be exactly one commit.  Indeed, you can undo the commit, or you can
 341add other commits.  This can be used to split a commit into two:
 342
 343- Start an interactive rebase with 'git rebase -i <commit>^', where
 344  <commit> is the commit you want to split.  In fact, any commit range
 345  will do, as long as it contains that commit.
 346
 347- Mark the commit you want to split with the action "edit".
 348
 349- When it comes to editing that commit, execute 'git reset HEAD^'.  The
 350  effect is that the HEAD is rewound by one, and the index follows suit.
 351  However, the working tree stays the same.
 352
 353- Now add the changes to the index that you want to have in the first
 354  commit.  You can use gitlink:git-add[1] (possibly interactively) and/or
 355  gitlink:git-gui[1] to do that.
 356
 357- Commit the now-current index with whatever commit message is appropriate
 358  now.
 359
 360- Repeat the last two steps until your working tree is clean.
 361
 362- Continue the rebase with 'git rebase --continue'.
 363
 364If you are not absolutely sure that the intermediate revisions are
 365consistent (they compile, pass the testsuite, etc.) you should use
 366gitlink:git-stash[1] to stash away the not-yet-committed changes
 367after each commit, test, and amend the commit if fixes are necessary.
 368
 369
 370Authors
 371------
 372Written by Junio C Hamano <junkio@cox.net> and
 373Johannes E. Schindelin <johannes.schindelin@gmx.de>
 374
 375Documentation
 376--------------
 377Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 378
 379GIT
 380---
 381Part of the gitlink:git[7] suite