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] [options] [--onto <newbase>] 12 [<upstream>] [<branch>] 13'git rebase' [-i | --interactive] [options] --onto <newbase> 14 --root [<branch>] 15 16'git rebase' --continue | --skip | --abort 17 18DESCRIPTION 19----------- 20If <branch> is specified, 'git rebase' will perform an automatic 21`git checkout <branch>` before doing anything else. Otherwise 22it remains on the current branch. 23 24If <upstream> is not specified, the upstream configured in 25branch.<name>.remote and branch.<name>.merge options will be used; see 26linkgit:git-config[1] for details. If you are currently not on any 27branch or if the current branch does not have a configured upstream, 28the rebase will abort. 29 30All changes made by commits in the current branch but that are not 31in <upstream> are saved to a temporary area. This is the same set 32of commits that would be shown by `git log <upstream>..HEAD` (or 33`git log HEAD`, if --root is specified). 34 35The current branch is reset to <upstream>, or <newbase> if the 36--onto option was supplied. This has the exact same effect as 37`git reset --hard <upstream>` (or <newbase>). ORIG_HEAD is set 38to point at the tip of the branch before the reset. 39 40The commits that were previously saved into the temporary area are 41then reapplied to the current branch, one by one, in order. Note that 42any commits in HEAD which introduce the same textual changes as a commit 43in HEAD..<upstream> are omitted (i.e., a patch already accepted upstream 44with a different commit message or timestamp will be skipped). 45 46It is possible that a merge failure will prevent this process from being 47completely automatic. You will have to resolve any such merge failure 48and run `git rebase --continue`. Another option is to bypass the commit 49that caused the merge failure with `git rebase --skip`. To restore the 50original <branch> and remove the .git/rebase-apply working files, use the 51command `git rebase --abort` instead. 52 53Assume the following history exists and the current branch is "topic": 54 55------------ 56 A---B---C topic 57 / 58 D---E---F---G master 59------------ 60 61From this point, the result of either of the following commands: 62 63 64 git rebase master 65 git rebase master topic 66 67would be: 68 69------------ 70 A'--B'--C' topic 71 / 72 D---E---F---G master 73------------ 74 75*NOTE:* The latter form is just a short-hand of `git checkout topic` 76followed by `git rebase master`. When rebase exits `topic` will 77remain the checked-out branch. 78 79If the upstream branch already contains a change you have made (e.g., 80because you mailed a patch which was applied upstream), then that commit 81will be skipped. For example, running `git rebase master` on the 82following history (in which A' and A introduce the same set of changes, 83but have different committer information): 84 85------------ 86 A---B---C topic 87 / 88 D---E---A'---F master 89------------ 90 91will result in: 92 93------------ 94 B'---C' topic 95 / 96 D---E---A'---F master 97------------ 98 99Here is how you would transplant a topic branch based on one 100branch to another, to pretend that you forked the topic branch 101from the latter branch, using `rebase --onto`. 102 103First let's assume your 'topic' is based on branch 'next'. 104For example, a feature developed in 'topic' depends on some 105functionality which is found in 'next'. 106 107------------ 108 o---o---o---o---o master 109 \ 110 o---o---o---o---o next 111 \ 112 o---o---o topic 113------------ 114 115We want to make 'topic' forked from branch 'master'; for example, 116because the functionality on which 'topic' depends was merged into the 117more stable 'master' branch. We want our tree to look like this: 118 119------------ 120 o---o---o---o---o master 121 | \ 122 | o'--o'--o' topic 123 \ 124 o---o---o---o---o next 125------------ 126 127We can get this using the following command: 128 129 git rebase --onto master next topic 130 131 132Another example of --onto option is to rebase part of a 133branch. If we have the following situation: 134 135------------ 136 H---I---J topicB 137 / 138 E---F---G topicA 139 / 140 A---B---C---D master 141------------ 142 143then the command 144 145 git rebase --onto master topicA topicB 146 147would result in: 148 149------------ 150 H'--I'--J' topicB 151 / 152 | E---F---G topicA 153 |/ 154 A---B---C---D master 155------------ 156 157This is useful when topicB does not depend on topicA. 158 159A range of commits could also be removed with rebase. If we have 160the following situation: 161 162------------ 163 E---F---G---H---I---J topicA 164------------ 165 166then the command 167 168 git rebase --onto topicA~5 topicA~3 topicA 169 170would result in the removal of commits F and G: 171 172------------ 173 E---H'---I'---J' topicA 174------------ 175 176This is useful if F and G were flawed in some way, or should not be 177part of topicA. Note that the argument to --onto and the <upstream> 178parameter can be any valid commit-ish. 179 180In case of conflict, 'git rebase' will stop at the first problematic commit 181and leave conflict markers in the tree. You can use 'git diff' to locate 182the markers (<<<<<<) and make edits to resolve the conflict. For each 183file you edit, you need to tell git that the conflict has been resolved, 184typically this would be done with 185 186 187 git add <filename> 188 189 190After resolving the conflict manually and updating the index with the 191desired resolution, you can continue the rebasing process with 192 193 194 git rebase --continue 195 196 197Alternatively, you can undo the 'git rebase' with 198 199 200 git rebase --abort 201 202CONFIGURATION 203------------- 204 205rebase.stat:: 206 Whether to show a diffstat of what changed upstream since the last 207 rebase. False by default. 208 209rebase.autosquash:: 210 If set to true enable '--autosquash' option by default. 211 212OPTIONS 213------- 214<newbase>:: 215 Starting point at which to create the new commits. If the 216 --onto option is not specified, the starting point is 217 <upstream>. May be any valid commit, and not just an 218 existing branch name. 219+ 220As a special case, you may use "A\...B" as a shortcut for the 221merge base of A and B if there is exactly one merge base. You can 222leave out at most one of A and B, in which case it defaults to HEAD. 223 224<upstream>:: 225 Upstream branch to compare against. May be any valid commit, 226 not just an existing branch name. Defaults to the configured 227 upstream for the current branch. 228 229<branch>:: 230 Working branch; defaults to HEAD. 231 232--continue:: 233 Restart the rebasing process after having resolved a merge conflict. 234 235--abort:: 236 Restore the original branch and abort the rebase operation. 237 238--skip:: 239 Restart the rebasing process by skipping the current patch. 240 241-m:: 242--merge:: 243 Use merging strategies to rebase. When the recursive (default) merge 244 strategy is used, this allows rebase to be aware of renames on the 245 upstream side. 246+ 247Note that a rebase merge works by replaying each commit from the working 248branch on top of the <upstream> branch. Because of this, when a merge 249conflict happens, the side reported as 'ours' is the so-far rebased 250series, starting with <upstream>, and 'theirs' is the working branch. In 251other words, the sides are swapped. 252 253-s <strategy>:: 254--strategy=<strategy>:: 255 Use the given merge strategy. 256 If there is no `-s` option 'git merge-recursive' is used 257 instead. This implies --merge. 258+ 259Because 'git rebase' replays each commit from the working branch 260on top of the <upstream> branch using the given strategy, using 261the 'ours' strategy simply discards all patches from the <branch>, 262which makes little sense. 263 264-X <strategy-option>:: 265--strategy-option=<strategy-option>:: 266 Pass the <strategy-option> through to the merge strategy. 267 This implies `\--merge` and, if no strategy has been 268 specified, `-s recursive`. Note the reversal of 'ours' and 269 'theirs' as noted in above for the `-m` option. 270 271-q:: 272--quiet:: 273 Be quiet. Implies --no-stat. 274 275-v:: 276--verbose:: 277 Be verbose. Implies --stat. 278 279--stat:: 280 Show a diffstat of what changed upstream since the last rebase. The 281 diffstat is also controlled by the configuration option rebase.stat. 282 283-n:: 284--no-stat:: 285 Do not show a diffstat as part of the rebase process. 286 287--no-verify:: 288 This option bypasses the pre-rebase hook. See also linkgit:githooks[5]. 289 290--verify:: 291 Allows the pre-rebase hook to run, which is the default. This option can 292 be used to override --no-verify. See also linkgit:githooks[5]. 293 294-C<n>:: 295 Ensure at least <n> lines of surrounding context match before 296 and after each change. When fewer lines of surrounding 297 context exist they all must match. By default no context is 298 ever ignored. 299 300-f:: 301--force-rebase:: 302 Force the rebase even if the current branch is a descendant 303 of the commit you are rebasing onto. Normally non-interactive rebase will 304 exit with the message "Current branch is up to date" in such a 305 situation. 306 Incompatible with the --interactive option. 307+ 308You may find this (or --no-ff with an interactive rebase) helpful after 309reverting a topic branch merge, as this option recreates the topic branch with 310fresh commits so it can be remerged successfully without needing to "revert 311the reversion" (see the 312link:howto/revert-a-faulty-merge.txt[revert-a-faulty-merge How-To] for details). 313 314--ignore-whitespace:: 315--whitespace=<option>:: 316 These flag are passed to the 'git apply' program 317 (see linkgit:git-apply[1]) that applies the patch. 318 Incompatible with the --interactive option. 319 320--committer-date-is-author-date:: 321--ignore-date:: 322 These flags are passed to 'git am' to easily change the dates 323 of the rebased commits (see linkgit:git-am[1]). 324 Incompatible with the --interactive option. 325 326-i:: 327--interactive:: 328 Make a list of the commits which are about to be rebased. Let the 329 user edit that list before rebasing. This mode can also be used to 330 split commits (see SPLITTING COMMITS below). 331 332-p:: 333--preserve-merges:: 334 Instead of ignoring merges, try to recreate them. 335+ 336This uses the `--interactive` machinery internally, but combining it 337with the `--interactive` option explicitly is generally not a good 338idea unless you know what you are doing (see BUGS below). 339 340 341--root:: 342 Rebase all commits reachable from <branch>, instead of 343 limiting them with an <upstream>. This allows you to rebase 344 the root commit(s) on a branch. Must be used with --onto, and 345 will skip changes already contained in <newbase> (instead of 346 <upstream>). When used together with --preserve-merges, 'all' 347 root commits will be rewritten to have <newbase> as parent 348 instead. 349 350--autosquash:: 351--no-autosquash:: 352 When the commit log message begins with "squash! ..." (or 353 "fixup! ..."), and there is a commit whose title begins with 354 the same ..., automatically modify the todo list of rebase -i 355 so that the commit marked for squashing comes right after the 356 commit to be modified, and change the action of the moved 357 commit from `pick` to `squash` (or `fixup`). 358+ 359This option is only valid when the '--interactive' option is used. 360+ 361If the '--autosquash' option is enabled by default using the 362configuration variable `rebase.autosquash`, this option can be 363used to override and disable this setting. 364 365--no-ff:: 366 With --interactive, cherry-pick all rebased commits instead of 367 fast-forwarding over the unchanged ones. This ensures that the 368 entire history of the rebased branch is composed of new commits. 369+ 370Without --interactive, this is a synonym for --force-rebase. 371+ 372You may find this helpful after reverting a topic branch merge, as this option 373recreates the topic branch with fresh commits so it can be remerged 374successfully without needing to "revert the reversion" (see the 375link:howto/revert-a-faulty-merge.txt[revert-a-faulty-merge How-To] for details). 376 377include::merge-strategies.txt[] 378 379NOTES 380----- 381 382You should understand the implications of using 'git rebase' on a 383repository that you share. See also RECOVERING FROM UPSTREAM REBASE 384below. 385 386When the git-rebase command is run, it will first execute a "pre-rebase" 387hook if one exists. You can use this hook to do sanity checks and 388reject the rebase if it isn't appropriate. Please see the template 389pre-rebase hook script for an example. 390 391Upon completion, <branch> will be the current branch. 392 393INTERACTIVE MODE 394---------------- 395 396Rebasing interactively means that you have a chance to edit the commits 397which are rebased. You can reorder the commits, and you can 398remove them (weeding out bad or otherwise unwanted patches). 399 400The interactive mode is meant for this type of workflow: 401 4021. have a wonderful idea 4032. hack on the code 4043. prepare a series for submission 4054. submit 406 407where point 2. consists of several instances of 408 409a. regular use 410 1. finish something worthy of a commit 411 2. commit 412b. independent fixup 413 1. realize that something does not work 414 2. fix that 415 3. commit it 416 417Sometimes the thing fixed in b.2. cannot be amended to the not-quite 418perfect commit it fixes, because that commit is buried deeply in a 419patch series. That is exactly what interactive rebase is for: use it 420after plenty of "a"s and "b"s, by rearranging and editing 421commits, and squashing multiple commits into one. 422 423Start it with the last commit you want to retain as-is: 424 425 git rebase -i <after-this-commit> 426 427An editor will be fired up with all the commits in your current branch 428(ignoring merge commits), which come after the given commit. You can 429reorder the commits in this list to your heart's content, and you can 430remove them. The list looks more or less like this: 431 432------------------------------------------- 433pick deadbee The oneline of this commit 434pick fa1afe1 The oneline of the next commit 435... 436------------------------------------------- 437 438The oneline descriptions are purely for your pleasure; 'git rebase' will 439not look at them but at the commit names ("deadbee" and "fa1afe1" in this 440example), so do not delete or edit the names. 441 442By replacing the command "pick" with the command "edit", you can tell 443'git rebase' to stop after applying that commit, so that you can edit 444the files and/or the commit message, amend the commit, and continue 445rebasing. 446 447If you just want to edit the commit message for a commit, replace the 448command "pick" with the command "reword". 449 450If you want to fold two or more commits into one, replace the command 451"pick" for the second and subsequent commits with "squash" or "fixup". 452If the commits had different authors, the folded commit will be 453attributed to the author of the first commit. The suggested commit 454message for the folded commit is the concatenation of the commit 455messages of the first commit and of those with the "squash" command, 456but omits the commit messages of commits with the "fixup" command. 457 458'git rebase' will stop when "pick" has been replaced with "edit" or 459when a command fails due to merge errors. When you are done editing 460and/or resolving conflicts you can continue with `git rebase --continue`. 461 462For example, if you want to reorder the last 5 commits, such that what 463was HEAD~4 becomes the new HEAD. To achieve that, you would call 464'git rebase' like this: 465 466---------------------- 467$ git rebase -i HEAD~5 468---------------------- 469 470And move the first patch to the end of the list. 471 472You might want to preserve merges, if you have a history like this: 473 474------------------ 475 X 476 \ 477 A---M---B 478 / 479---o---O---P---Q 480------------------ 481 482Suppose you want to rebase the side branch starting at "A" to "Q". Make 483sure that the current HEAD is "B", and call 484 485----------------------------- 486$ git rebase -i -p --onto Q O 487----------------------------- 488 489Reordering and editing commits usually creates untested intermediate 490steps. You may want to check that your history editing did not break 491anything by running a test, or at least recompiling at intermediate 492points in history by using the "exec" command (shortcut "x"). You may 493do so by creating a todo list like this one: 494 495------------------------------------------- 496pick deadbee Implement feature XXX 497fixup f1a5c00 Fix to feature XXX 498exec make 499pick c0ffeee The oneline of the next commit 500edit deadbab The oneline of the commit after 501exec cd subdir; make test 502... 503------------------------------------------- 504 505The interactive rebase will stop when a command fails (i.e. exits with 506non-0 status) to give you an opportunity to fix the problem. You can 507continue with `git rebase --continue`. 508 509The "exec" command launches the command in a shell (the one specified 510in `$SHELL`, or the default shell if `$SHELL` is not set), so you can 511use shell features (like "cd", ">", ";" ...). The command is run from 512the root of the working tree. 513 514SPLITTING COMMITS 515----------------- 516 517In interactive mode, you can mark commits with the action "edit". However, 518this does not necessarily mean that 'git rebase' expects the result of this 519edit to be exactly one commit. Indeed, you can undo the commit, or you can 520add other commits. This can be used to split a commit into two: 521 522- Start an interactive rebase with `git rebase -i <commit>^`, where 523 <commit> is the commit you want to split. In fact, any commit range 524 will do, as long as it contains that commit. 525 526- Mark the commit you want to split with the action "edit". 527 528- When it comes to editing that commit, execute `git reset HEAD^`. The 529 effect is that the HEAD is rewound by one, and the index follows suit. 530 However, the working tree stays the same. 531 532- Now add the changes to the index that you want to have in the first 533 commit. You can use `git add` (possibly interactively) or 534 'git gui' (or both) to do that. 535 536- Commit the now-current index with whatever commit message is appropriate 537 now. 538 539- Repeat the last two steps until your working tree is clean. 540 541- Continue the rebase with `git rebase --continue`. 542 543If you are not absolutely sure that the intermediate revisions are 544consistent (they compile, pass the testsuite, etc.) you should use 545'git stash' to stash away the not-yet-committed changes 546after each commit, test, and amend the commit if fixes are necessary. 547 548 549RECOVERING FROM UPSTREAM REBASE 550------------------------------- 551 552Rebasing (or any other form of rewriting) a branch that others have 553based work on is a bad idea: anyone downstream of it is forced to 554manually fix their history. This section explains how to do the fix 555from the downstream's point of view. The real fix, however, would be 556to avoid rebasing the upstream in the first place. 557 558To illustrate, suppose you are in a situation where someone develops a 559'subsystem' branch, and you are working on a 'topic' that is dependent 560on this 'subsystem'. You might end up with a history like the 561following: 562 563------------ 564 o---o---o---o---o---o---o---o---o master 565 \ 566 o---o---o---o---o subsystem 567 \ 568 *---*---* topic 569------------ 570 571If 'subsystem' is rebased against 'master', the following happens: 572 573------------ 574 o---o---o---o---o---o---o---o master 575 \ \ 576 o---o---o---o---o o'--o'--o'--o'--o' subsystem 577 \ 578 *---*---* topic 579------------ 580 581If you now continue development as usual, and eventually merge 'topic' 582to 'subsystem', the commits from 'subsystem' will remain duplicated forever: 583 584------------ 585 o---o---o---o---o---o---o---o master 586 \ \ 587 o---o---o---o---o o'--o'--o'--o'--o'--M subsystem 588 \ / 589 *---*---*-..........-*--* topic 590------------ 591 592Such duplicates are generally frowned upon because they clutter up 593history, making it harder to follow. To clean things up, you need to 594transplant the commits on 'topic' to the new 'subsystem' tip, i.e., 595rebase 'topic'. This becomes a ripple effect: anyone downstream from 596'topic' is forced to rebase too, and so on! 597 598There are two kinds of fixes, discussed in the following subsections: 599 600Easy case: The changes are literally the same.:: 601 602 This happens if the 'subsystem' rebase was a simple rebase and 603 had no conflicts. 604 605Hard case: The changes are not the same.:: 606 607 This happens if the 'subsystem' rebase had conflicts, or used 608 `\--interactive` to omit, edit, squash, or fixup commits; or 609 if the upstream used one of `commit \--amend`, `reset`, or 610 `filter-branch`. 611 612 613The easy case 614~~~~~~~~~~~~~ 615 616Only works if the changes (patch IDs based on the diff contents) on 617'subsystem' are literally the same before and after the rebase 618'subsystem' did. 619 620In that case, the fix is easy because 'git rebase' knows to skip 621changes that are already present in the new upstream. So if you say 622(assuming you're on 'topic') 623------------ 624 $ git rebase subsystem 625------------ 626you will end up with the fixed history 627------------ 628 o---o---o---o---o---o---o---o master 629 \ 630 o'--o'--o'--o'--o' subsystem 631 \ 632 *---*---* topic 633------------ 634 635 636The hard case 637~~~~~~~~~~~~~ 638 639Things get more complicated if the 'subsystem' changes do not exactly 640correspond to the ones before the rebase. 641 642NOTE: While an "easy case recovery" sometimes appears to be successful 643 even in the hard case, it may have unintended consequences. For 644 example, a commit that was removed via `git rebase 645 \--interactive` will be **resurrected**! 646 647The idea is to manually tell 'git rebase' "where the old 'subsystem' 648ended and your 'topic' began", that is, what the old merge-base 649between them was. You will have to find a way to name the last commit 650of the old 'subsystem', for example: 651 652* With the 'subsystem' reflog: after 'git fetch', the old tip of 653 'subsystem' is at `subsystem@\{1}`. Subsequent fetches will 654 increase the number. (See linkgit:git-reflog[1].) 655 656* Relative to the tip of 'topic': knowing that your 'topic' has three 657 commits, the old tip of 'subsystem' must be `topic~3`. 658 659You can then transplant the old `subsystem..topic` to the new tip by 660saying (for the reflog case, and assuming you are on 'topic' already): 661------------ 662 $ git rebase --onto subsystem subsystem@{1} 663------------ 664 665The ripple effect of a "hard case" recovery is especially bad: 666'everyone' downstream from 'topic' will now have to perform a "hard 667case" recovery too! 668 669BUGS 670---- 671The todo list presented by `--preserve-merges --interactive` does not 672represent the topology of the revision graph. Editing commits and 673rewording their commit messages should work fine, but attempts to 674reorder commits tend to produce counterintuitive results. 675 676For example, an attempt to rearrange 677------------ 6781 --- 2 --- 3 --- 4 --- 5 679------------ 680to 681------------ 6821 --- 2 --- 4 --- 3 --- 5 683------------ 684by moving the "pick 4" line will result in the following history: 685------------ 686 3 687 / 6881 --- 2 --- 4 --- 5 689------------ 690 691GIT 692--- 693Part of the linkgit:git[1] suite