blob: 3407d835bdb233ce6b1779bd33d91767d88a9716 [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-rebase(1)
2=============
3
4NAME
5----
Junio C Hamanodf97ffc2016-03-10 22:58:006git-rebase - Reapply commits on top of another base tip
Junio C Hamano1a4e8412005-12-27 08:17:237
8SYNOPSIS
9--------
Junio C Hamanoa9b8d242007-05-19 04:51:5510[verse]
Junio C Hamanoc9cb5172018-06-01 07:13:4411'git rebase' [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
Junio C Hamanoac12f0e2014-09-19 22:32:5112[<upstream> [<branch>]]
Junio C Hamanoc9cb5172018-06-01 07:13:4413'git rebase' [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
Junio C Hamanobd53dbf2009-01-18 18:26:3714--root [<branch>]
Junio C Hamano664750f2018-03-06 23:25:4415'git rebase' --continue | --skip | --abort | --quit | --edit-todo | --show-current-patch
Junio C Hamano6112cad2006-05-02 07:28:0616
Junio C Hamano1a4e8412005-12-27 08:17:2317DESCRIPTION
18-----------
Junio C Hamano1aa40d22010-01-21 17:46:4319If <branch> is specified, 'git rebase' will perform an automatic
Junio C Hamano89d4e0f2007-02-18 00:34:5920`git checkout <branch>` before doing anything else. Otherwise
21it remains on the current branch.
22
Junio C Hamanob02377c2011-04-28 22:26:0223If <upstream> is not specified, the upstream configured in
Junio C Hamano9236fea2014-10-14 22:28:0924branch.<name>.remote and branch.<name>.merge options will be used (see
25linkgit:git-config[1] for details) and the `--fork-point` option is
26assumed. If you are currently not on any branch or if the current
27branch does not have a configured upstream, the rebase will abort.
Junio C Hamanob02377c2011-04-28 22:26:0228
Junio C Hamano89d4e0f2007-02-18 00:34:5929All changes made by commits in the current branch but that are not
30in <upstream> are saved to a temporary area. This is the same set
Junio C Hamano9236fea2014-10-14 22:28:0931of commits that would be shown by `git log <upstream>..HEAD`; or by
32`git log 'fork_point'..HEAD`, if `--fork-point` is active (see the
33description on `--fork-point` below); or by `git log HEAD`, if the
34`--root` option is specified.
Junio C Hamano89d4e0f2007-02-18 00:34:5935
36The current branch is reset to <upstream>, or <newbase> if the
37--onto option was supplied. This has the exact same effect as
Junio C Hamano38ddcce2008-07-15 15:49:0338`git reset --hard <upstream>` (or <newbase>). ORIG_HEAD is set
39to point at the tip of the branch before the reset.
Junio C Hamano89d4e0f2007-02-18 00:34:5940
41The commits that were previously saved into the temporary area are
Junio C Hamano764a6672007-10-23 01:23:3142then reapplied to the current branch, one by one, in order. Note that
43any commits in HEAD which introduce the same textual changes as a commit
44in HEAD..<upstream> are omitted (i.e., a patch already accepted upstream
45with a different commit message or timestamp will be skipped).
Junio C Hamano7e9f6b72006-02-22 10:44:5546
Junio C Hamano6112cad2006-05-02 07:28:0647It is possible that a merge failure will prevent this process from being
48completely automatic. You will have to resolve any such merge failure
Junio C Hamano6959c6c2006-05-17 10:34:1149and run `git rebase --continue`. Another option is to bypass the commit
Junio C Hamano15567bc2011-07-23 00:51:5950that caused the merge failure with `git rebase --skip`. To check out the
Junio C Hamano0868a302008-07-22 09:20:4451original <branch> and remove the .git/rebase-apply working files, use the
52command `git rebase --abort` instead.
Junio C Hamano6112cad2006-05-02 07:28:0653
Junio C Hamano7e9f6b72006-02-22 10:44:5554Assume the following history exists and the current branch is "topic":
55
Junio C Hamano6112cad2006-05-02 07:28:0656------------
Junio C Hamano7e9f6b72006-02-22 10:44:5557 A---B---C topic
58 /
59 D---E---F---G master
Junio C Hamano6112cad2006-05-02 07:28:0660------------
Junio C Hamano7e9f6b72006-02-22 10:44:5561
Junio C Hamano2b135272006-03-18 07:45:4262From this point, the result of either of the following commands:
Junio C Hamano7e9f6b72006-02-22 10:44:5563
Junio C Hamano6112cad2006-05-02 07:28:0664
Junio C Hamanofce7c7e2008-07-02 03:06:3865 git rebase master
66 git rebase master topic
Junio C Hamano7e9f6b72006-02-22 10:44:5567
68would be:
69
Junio C Hamano6112cad2006-05-02 07:28:0670------------
Junio C Hamano7e9f6b72006-02-22 10:44:5571 A'--B'--C' topic
72 /
73 D---E---F---G master
Junio C Hamano6112cad2006-05-02 07:28:0674------------
Junio C Hamano7e9f6b72006-02-22 10:44:5575
Junio C Hamano92faa802011-03-15 01:00:1876*NOTE:* The latter form is just a short-hand of `git checkout topic`
77followed by `git rebase master`. When rebase exits `topic` will
78remain the checked-out branch.
Junio C Hamano7e9f6b72006-02-22 10:44:5579
Junio C Hamano764a6672007-10-23 01:23:3180If the upstream branch already contains a change you have made (e.g.,
81because you mailed a patch which was applied upstream), then that commit
Junio C Hamanofce7c7e2008-07-02 03:06:3882will be skipped. For example, running `git rebase master` on the
Junio C Hamano1dbca522015-05-22 20:48:5583following history (in which `A'` and `A` introduce the same set of changes,
Junio C Hamano764a6672007-10-23 01:23:3184but have different committer information):
85
86------------
87 A---B---C topic
88 /
89 D---E---A'---F master
90------------
91
92will result in:
93
94------------
95 B'---C' topic
96 /
97 D---E---A'---F master
98------------
99
Junio C Hamanod8c9d432006-11-07 07:19:13100Here is how you would transplant a topic branch based on one
101branch to another, to pretend that you forked the topic branch
102from the latter branch, using `rebase --onto`.
Junio C Hamano7e9f6b72006-02-22 10:44:55103
Junio C Hamanod8c9d432006-11-07 07:19:13104First let's assume your 'topic' is based on branch 'next'.
Junio C Hamanoa476efa2008-10-10 15:31:42105For example, a feature developed in 'topic' depends on some
Junio C Hamanod8c9d432006-11-07 07:19:13106functionality which is found in 'next'.
Junio C Hamano7e9f6b72006-02-22 10:44:55107
Junio C Hamano6112cad2006-05-02 07:28:06108------------
Junio C Hamanod8c9d432006-11-07 07:19:13109 o---o---o---o---o master
110 \
111 o---o---o---o---o next
112 \
113 o---o---o topic
Junio C Hamano6112cad2006-05-02 07:28:06114------------
Junio C Hamano1a4e8412005-12-27 08:17:23115
Junio C Hamanoa476efa2008-10-10 15:31:42116We want to make 'topic' forked from branch 'master'; for example,
117because the functionality on which 'topic' depends was merged into the
118more stable 'master' branch. We want our tree to look like this:
Junio C Hamanod8c9d432006-11-07 07:19:13119
120------------
121 o---o---o---o---o master
122 | \
123 | o'--o'--o' topic
124 \
125 o---o---o---o---o next
126------------
127
128We can get this using the following command:
129
Junio C Hamanofce7c7e2008-07-02 03:06:38130 git rebase --onto master next topic
Junio C Hamanod8c9d432006-11-07 07:19:13131
132
133Another example of --onto option is to rebase part of a
134branch. If we have the following situation:
135
136------------
137 H---I---J topicB
138 /
139 E---F---G topicA
140 /
141 A---B---C---D master
142------------
143
144then the command
145
Junio C Hamanofce7c7e2008-07-02 03:06:38146 git rebase --onto master topicA topicB
Junio C Hamanod8c9d432006-11-07 07:19:13147
148would result in:
149
150------------
151 H'--I'--J' topicB
152 /
153 | E---F---G topicA
154 |/
155 A---B---C---D master
156------------
157
158This is useful when topicB does not depend on topicA.
159
Junio C Hamano42f855f2007-02-06 00:09:38160A range of commits could also be removed with rebase. If we have
161the following situation:
162
163------------
164 E---F---G---H---I---J topicA
165------------
166
167then the command
168
Junio C Hamanofce7c7e2008-07-02 03:06:38169 git rebase --onto topicA~5 topicA~3 topicA
Junio C Hamano42f855f2007-02-06 00:09:38170
171would result in the removal of commits F and G:
172
173------------
174 E---H'---I'---J' topicA
175------------
176
177This is useful if F and G were flawed in some way, or should not be
178part of topicA. Note that the argument to --onto and the <upstream>
179parameter can be any valid commit-ish.
180
Junio C Hamano1aa40d22010-01-21 17:46:43181In case of conflict, 'git rebase' will stop at the first problematic commit
182and leave conflict markers in the tree. You can use 'git diff' to locate
Junio C Hamano6112cad2006-05-02 07:28:06183the markers (<<<<<<) and make edits to resolve the conflict. For each
Junio C Hamano076ffcc2013-02-06 05:13:21184file you edit, you need to tell Git that the conflict has been resolved,
Junio C Hamano6112cad2006-05-02 07:28:06185typically this would be done with
Junio C Hamanof02e09f2006-03-27 07:51:03186
Junio C Hamano6112cad2006-05-02 07:28:06187
Junio C Hamano89d4e0f2007-02-18 00:34:59188 git add <filename>
Junio C Hamano6112cad2006-05-02 07:28:06189
190
191After resolving the conflict manually and updating the index with the
192desired resolution, you can continue the rebasing process with
193
194
195 git rebase --continue
196
Junio C Hamanof02e09f2006-03-27 07:51:03197
Junio C Hamano1aa40d22010-01-21 17:46:43198Alternatively, you can undo the 'git rebase' with
Junio C Hamanof02e09f2006-03-27 07:51:03199
Junio C Hamano6112cad2006-05-02 07:28:06200
201 git rebase --abort
Junio C Hamanof02e09f2006-03-27 07:51:03202
Junio C Hamanoea6a7642009-03-11 23:56:19203CONFIGURATION
204-------------
205
Junio C Hamano0f1291d2017-12-27 19:58:35206include::rebase-config.txt[]
Junio C Hamanod7ed4042015-08-03 19:43:00207
Junio C Hamano1a4e8412005-12-27 08:17:23208OPTIONS
209-------
Junio C Hamano644936c2012-06-28 23:05:14210--onto <newbase>::
Junio C Hamano7e9f6b72006-02-22 10:44:55211Starting point at which to create the new commits. If the
212--onto option is not specified, the starting point is
Junio C Hamano42f855f2007-02-06 00:09:38213<upstream>. May be any valid commit, and not just an
214existing branch name.
Junio C Hamanoe32ec8b2010-06-02 23:32:31215+
Junio C Hamano2db3e752010-09-03 21:33:06216As a special case, you may use "A\...B" as a shortcut for the
Junio C Hamanoe32ec8b2010-06-02 23:32:31217merge base of A and B if there is exactly one merge base. You can
218leave out at most one of A and B, in which case it defaults to HEAD.
Junio C Hamano7e9f6b72006-02-22 10:44:55219
Junio C Hamano1a4e8412005-12-27 08:17:23220<upstream>::
Junio C Hamano42f855f2007-02-06 00:09:38221Upstream branch to compare against. May be any valid commit,
Junio C Hamanob02377c2011-04-28 22:26:02222not just an existing branch name. Defaults to the configured
223upstream for the current branch.
Junio C Hamano1a4e8412005-12-27 08:17:23224
Junio C Hamano2b135272006-03-18 07:45:42225<branch>::
Junio C Hamano1a4e8412005-12-27 08:17:23226Working branch; defaults to HEAD.
227
Junio C Hamano6112cad2006-05-02 07:28:06228--continue::
229Restart the rebasing process after having resolved a merge conflict.
230
231--abort::
Junio C Hamano15567bc2011-07-23 00:51:59232Abort the rebase operation and reset HEAD to the original
233branch. If <branch> was provided when the rebase operation was
234started, then HEAD will be reset to <branch>. Otherwise HEAD
235will be reset to where it was when the rebase operation was
236started.
Junio C Hamano6112cad2006-05-02 07:28:06237
Junio C Hamano52b1cfb2016-12-20 00:18:36238--quit::
239Abort the rebase operation but HEAD is not reset back to the
240original branch. The index and working tree are also left
241unchanged as a result.
242
Junio C Hamano37e389e2012-04-30 22:36:09243--keep-empty::
244Keep the commits that do not change anything from its
245parents in the result.
Junio C Hamano1ff03382018-07-25 22:10:48246+
247See also INCOMPATIBLE OPTIONS below.
Junio C Hamano37e389e2012-04-30 22:36:09248
Junio C Hamano615c3b32018-02-28 23:40:27249--allow-empty-message::
250By default, rebasing commits with an empty message will fail.
251This option overrides that behavior, allowing commits with empty
252messages to be rebased.
Junio C Hamano1ff03382018-07-25 22:10:48253+
254See also INCOMPATIBLE OPTIONS below.
Junio C Hamano615c3b32018-02-28 23:40:27255
Junio C Hamano97f518c2006-06-22 19:49:35256--skip::
257Restart the rebasing process by skipping the current patch.
Junio C Hamano97f518c2006-06-22 19:49:35258
Junio C Hamano9cdfecf2012-09-30 07:38:36259--edit-todo::
260Edit the todo list during an interactive rebase.
261
Junio C Hamano664750f2018-03-06 23:25:44262--show-current-patch::
263Show the current patch in an interactive rebase or when rebase
264is stopped because of conflicts. This is the equivalent of
265`git show REBASE_HEAD`.
266
Junio C Hamanoeb415992008-06-08 22:49:47267-m::
268--merge::
Junio C Hamano97f518c2006-06-22 19:49:35269Use merging strategies to rebase. When the recursive (default) merge
270strategy is used, this allows rebase to be aware of renames on the
271upstream side.
Junio C Hamanobf984de2009-11-23 06:11:19272+
273Note that a rebase merge works by replaying each commit from the working
274branch on top of the <upstream> branch. Because of this, when a merge
275conflict happens, the side reported as 'ours' is the so-far rebased
276series, starting with <upstream>, and 'theirs' is the working branch. In
277other words, the sides are swapped.
Junio C Hamano1ff03382018-07-25 22:10:48278+
279See also INCOMPATIBLE OPTIONS below.
Junio C Hamano97f518c2006-06-22 19:49:35280
Junio C Hamanoeb415992008-06-08 22:49:47281-s <strategy>::
282--strategy=<strategy>::
Junio C Hamano52d5def2009-05-21 16:27:43283Use the given merge strategy.
Junio C Hamano1aa40d22010-01-21 17:46:43284If there is no `-s` option 'git merge-recursive' is used
Junio C Hamanobf984de2009-11-23 06:11:19285instead. This implies --merge.
286+
Junio C Hamano1aa40d22010-01-21 17:46:43287Because 'git rebase' replays each commit from the working branch
Junio C Hamanobf984de2009-11-23 06:11:19288on top of the <upstream> branch using the given strategy, using
Junio C Hamano1ff03382018-07-25 22:10:48289the 'ours' strategy simply empties all patches from the <branch>,
Junio C Hamanobf984de2009-11-23 06:11:19290which makes little sense.
Junio C Hamano1ff03382018-07-25 22:10:48291+
292See also INCOMPATIBLE OPTIONS below.
Junio C Hamano97f518c2006-06-22 19:49:35293
Junio C Hamano619596a2010-08-18 22:15:35294-X <strategy-option>::
295--strategy-option=<strategy-option>::
296Pass the <strategy-option> through to the merge strategy.
Junio C Hamanob76a6862012-05-02 22:02:46297This implies `--merge` and, if no strategy has been
Junio C Hamano619596a2010-08-18 22:15:35298specified, `-s recursive`. Note the reversal of 'ours' and
Junio C Hamano44dcd492012-07-24 04:35:38299'theirs' as noted above for the `-m` option.
Junio C Hamano1ff03382018-07-25 22:10:48300+
301See also INCOMPATIBLE OPTIONS below.
Junio C Hamano619596a2010-08-18 22:15:35302
Junio C Hamano5b3533d2014-02-27 23:07:15303-S[<keyid>]::
304--gpg-sign[=<keyid>]::
Junio C Hamano1eb56092015-10-05 20:39:53305GPG-sign commits. The `keyid` argument is optional and
306defaults to the committer identity; if specified, it must be
307stuck to the option without a space.
Junio C Hamano5b3533d2014-02-27 23:07:15308
Junio C Hamano2c14c8d2009-07-02 03:17:00309-q::
310--quiet::
311Be quiet. Implies --no-stat.
312
Junio C Hamanoeb415992008-06-08 22:49:47313-v::
314--verbose::
Junio C Hamanoea6a7642009-03-11 23:56:19315Be verbose. Implies --stat.
316
317--stat::
318Show a diffstat of what changed upstream since the last rebase. The
319diffstat is also controlled by the configuration option rebase.stat.
320
321-n::
322--no-stat::
323Do not show a diffstat as part of the rebase process.
Junio C Hamanofbe00522006-10-19 05:58:48324
Junio C Hamano7d06a8a2008-10-20 05:42:33325--no-verify::
326This option bypasses the pre-rebase hook. See also linkgit:githooks[5].
327
Junio C Hamanoeef01fe2010-12-13 08:31:58328--verify::
329Allows the pre-rebase hook to run, which is the default. This option can
330be used to override --no-verify. See also linkgit:githooks[5].
331
Junio C Hamanod3339982007-02-09 08:38:48332-C<n>::
333Ensure at least <n> lines of surrounding context match before
334and after each change. When fewer lines of surrounding
335context exist they all must match. By default no context is
336ever ignored.
Junio C Hamanoef8fbf92010-04-04 19:12:02337+
Junio C Hamano1ff03382018-07-25 22:10:48338See also INCOMPATIBLE OPTIONS below.
339
340--no-ff::
341--force-rebase::
342-f::
343Individually replay all rebased commits instead of fast-forwarding
344over the unchanged ones. This ensures that the entire history of
345the rebased branch is composed of new commits.
346+
347You may find this helpful after reverting a topic branch merge, as this option
348recreates the topic branch with fresh commits so it can be remerged
349successfully without needing to "revert the reversion" (see the
350link:howto/revert-a-faulty-merge.html[revert-a-faulty-merge How-To] for
351details).
Junio C Hamanoa973f1c2009-03-19 17:47:52352
Junio C Hamanob1acf022013-12-28 00:33:16353--fork-point::
354--no-fork-point::
Junio C Hamano9236fea2014-10-14 22:28:09355Use reflog to find a better common ancestor between <upstream>
356and <branch> when calculating which commits have been
357introduced by <branch>.
Junio C Hamanob1acf022013-12-28 00:33:16358+
Junio C Hamano9236fea2014-10-14 22:28:09359When --fork-point is active, 'fork_point' will be used instead of
360<upstream> to calculate the set of commits to rebase, where
361'fork_point' is the result of `git merge-base --fork-point <upstream>
362<branch>` command (see linkgit:git-merge-base[1]). If 'fork_point'
363ends up being empty, the <upstream> will be used as a fallback.
364+
365If either <upstream> or --root is given on the command line, then the
366default is `--no-fork-point`, otherwise the default is `--fork-point`.
Junio C Hamanob1acf022013-12-28 00:33:16367
Junio C Hamanofe24db02009-08-22 05:10:47368--ignore-whitespace::
Junio C Hamanof8a79222009-03-01 08:02:50369--whitespace=<option>::
Junio C Hamano1aa40d22010-01-21 17:46:43370These flag are passed to the 'git apply' program
Junio C Hamano35738e82008-01-07 07:55:46371(see linkgit:git-apply[1]) that applies the patch.
Junio C Hamano1ff03382018-07-25 22:10:48372+
373See also INCOMPATIBLE OPTIONS below.
Junio C Hamano250f03e2007-09-10 01:33:28374
Junio C Hamanoa973f1c2009-03-19 17:47:52375--committer-date-is-author-date::
376--ignore-date::
Junio C Hamano1aa40d22010-01-21 17:46:43377These flags are passed to 'git am' to easily change the dates
Junio C Hamanoa973f1c2009-03-19 17:47:52378of the rebased commits (see linkgit:git-am[1]).
Junio C Hamano1ff03382018-07-25 22:10:48379+
380See also INCOMPATIBLE OPTIONS below.
Junio C Hamanoa973f1c2009-03-19 17:47:52381
Junio C Hamanobeca3402017-04-27 02:21:51382--signoff::
Junio C Hamano96153bf2018-04-25 08:25:34383Add a Signed-off-by: trailer to all the rebased commits. Note
384that if `--interactive` is given then only commits marked to be
Junio C Hamano1ff03382018-07-25 22:10:48385picked, edited or reworded will have the trailer added.
386+
387See also INCOMPATIBLE OPTIONS below.
Junio C Hamanobeca3402017-04-27 02:21:51388
Junio C Hamanoeb415992008-06-08 22:49:47389-i::
390--interactive::
Junio C Hamano1d90cb02007-07-03 07:05:31391Make a list of the commits which are about to be rebased. Let the
Junio C Hamanodbb64592007-09-01 11:17:39392user edit that list before rebasing. This mode can also be used to
393split commits (see SPLITTING COMMITS below).
Junio C Hamanod7ed4042015-08-03 19:43:00394+
395The commit list format can be changed by setting the configuration option
396rebase.instructionFormat. A customized instruction format will automatically
397have the long commit hash prepended to the format.
Junio C Hamano1ff03382018-07-25 22:10:48398+
399See also INCOMPATIBLE OPTIONS below.
Junio C Hamano1d90cb02007-07-03 07:05:31400
Junio C Hamanob9d9d902018-05-23 07:07:42401-r::
402--rebase-merges[=(rebase-cousins|no-rebase-cousins)]::
403By default, a rebase will simply drop merge commits from the todo
404list, and put the rebased commits into a single, linear branch.
405With `--rebase-merges`, the rebase will instead try to preserve
406the branching structure within the commits that are to be rebased,
407by recreating the merge commits. Any resolved merge conflicts or
408manual amendments in these merge commits will have to be
409resolved/re-applied manually.
410+
411By default, or when `no-rebase-cousins` was specified, commits which do not
412have `<upstream>` as direct ancestor will keep their original branch point,
413i.e. commits that would be excluded by gitlink:git-log[1]'s
414`--ancestry-path` option will keep their original ancestry by default. If
415the `rebase-cousins` mode is turned on, such commits are instead rebased
416onto `<upstream>` (or `<onto>`, if specified).
417+
418The `--rebase-merges` mode is similar in spirit to `--preserve-merges`, but
419in contrast to that option works well in interactive rebases: commits can be
420reordered, inserted and dropped at will.
421+
422It is currently only possible to recreate the merge commits using the
423`recursive` merge strategy; Different merge strategies can be used only via
424explicit `exec git merge -s <strategy> [...]` commands.
425+
Junio C Hamano1ff03382018-07-25 22:10:48426See also REBASING MERGES and INCOMPATIBLE OPTIONS below.
Junio C Hamanob9d9d902018-05-23 07:07:42427
Junio C Hamanoeb415992008-06-08 22:49:47428-p::
429--preserve-merges::
Junio C Hamano8ea9ba92015-04-02 21:08:50430Recreate merge commits instead of flattening the history by replaying
431commits a merge commit introduces. Merge conflict resolutions or manual
432amendments to merge commits are not preserved.
Junio C Hamanobb88cf42010-06-21 15:23:55433+
434This uses the `--interactive` machinery internally, but combining it
435with the `--interactive` option explicitly is generally not a good
436idea unless you know what you are doing (see BUGS below).
Junio C Hamano1ff03382018-07-25 22:10:48437+
438See also INCOMPATIBLE OPTIONS below.
Junio C Hamanobb88cf42010-06-21 15:23:55439
Junio C Hamano644936c2012-06-28 23:05:14440-x <cmd>::
441--exec <cmd>::
442Append "exec <cmd>" after each line creating a commit in the
443final history. <cmd> will be interpreted as one or more shell
Junio C Hamano920a6952018-11-02 05:00:42444commands. Any command that fails will interrupt the rebase,
445with exit code 1.
Junio C Hamano644936c2012-06-28 23:05:14446+
Junio C Hamano644936c2012-06-28 23:05:14447You may execute several commands by either using one instance of `--exec`
448with several commands:
449+
450git rebase -i --exec "cmd1 && cmd2 && ..."
451+
452or by giving more than one `--exec`:
453+
454git rebase -i --exec "cmd1" --exec "cmd2" --exec ...
455+
456If `--autosquash` is used, "exec" lines will not be appended for
457the intermediate commits, and will only appear at the end of each
458squash/fixup series.
Junio C Hamanobec5da42016-04-06 22:58:21459+
460This uses the `--interactive` machinery internally, but it can be run
461without an explicit `--interactive`.
Junio C Hamano1ff03382018-07-25 22:10:48462+
463See also INCOMPATIBLE OPTIONS below.
Junio C Hamano1d90cb02007-07-03 07:05:31464
Junio C Hamanobd53dbf2009-01-18 18:26:37465--root::
466Rebase all commits reachable from <branch>, instead of
467limiting them with an <upstream>. This allows you to rebase
Junio C Hamano02482692012-07-16 05:28:39468the root commit(s) on a branch. When used with --onto, it
Junio C Hamanobd53dbf2009-01-18 18:26:37469will skip changes already contained in <newbase> (instead of
Junio C Hamano02482692012-07-16 05:28:39470<upstream>) whereas without --onto it will operate on every change.
471When used together with both --onto and --preserve-merges,
472'all' root commits will be rewritten to have <newbase> as parent
Junio C Hamanobd53dbf2009-01-18 18:26:37473instead.
Junio C Hamano1ff03382018-07-25 22:10:48474+
475See also INCOMPATIBLE OPTIONS below.
Junio C Hamanobd53dbf2009-01-18 18:26:37476
Junio C Hamanoa9701f02010-01-21 00:42:16477--autosquash::
Junio C Hamano075ae872010-09-01 18:43:07478--no-autosquash::
Junio C Hamanoa9701f02010-01-21 00:42:16479When the commit log message begins with "squash! ..." (or
Junio C Hamano139b7d12017-10-03 07:10:59480"fixup! ..."), and there is already a commit in the todo list that
481matches the same `...`, automatically modify the todo list of rebase
482-i so that the commit marked for squashing comes right after the
483commit to be modified, and change the action of the moved commit
484from `pick` to `squash` (or `fixup`). A commit matches the `...` if
485the commit subject matches, or if the `...` refers to the commit's
486hash. As a fall-back, partial matches of the commit subject work,
487too. The recommended way to create fixup/squash commits is by using
488the `--fixup`/`--squash` options of linkgit:git-commit[1].
Junio C Hamanoa9701f02010-01-21 00:42:16489+
Junio C Hamano92d80372016-07-13 22:00:05490If the `--autosquash` option is enabled by default using the
Junio C Hamano322c6242015-03-23 21:32:46491configuration variable `rebase.autoSquash`, this option can be
Junio C Hamano075ae872010-09-01 18:43:07492used to override and disable this setting.
Junio C Hamano1ff03382018-07-25 22:10:48493+
494See also INCOMPATIBLE OPTIONS below.
Junio C Hamanoef8fbf92010-04-04 19:12:02495
Junio C Hamano1eb56092015-10-05 20:39:53496--autostash::
497--no-autostash::
Junio C Hamano967cda72017-06-30 21:49:53498Automatically create a temporary stash entry before the operation
Junio C Hamanof1f5a7b2013-06-11 22:23:52499begins, and apply it after the operation ends. This means
500that you can run rebase on a dirty worktree. However, use
501with care: the final stash application after a successful
502rebase might result in non-trivial conflicts.
503
Junio C Hamano1ff03382018-07-25 22:10:48504INCOMPATIBLE OPTIONS
505--------------------
506
507git-rebase has many flags that are incompatible with each other,
508predominantly due to the fact that it has three different underlying
509implementations:
510
511 * one based on linkgit:git-am[1] (the default)
512 * one based on git-merge-recursive (merge backend)
513 * one based on linkgit:git-cherry-pick[1] (interactive backend)
514
515Flags only understood by the am backend:
516
517 * --committer-date-is-author-date
518 * --ignore-date
519 * --whitespace
520 * --ignore-whitespace
521 * -C
522
523Flags understood by both merge and interactive backends:
524
525 * --merge
526 * --strategy
527 * --strategy-option
528 * --allow-empty-message
529
530Flags only understood by the interactive backend:
531
532 * --[no-]autosquash
533 * --rebase-merges
534 * --preserve-merges
535 * --interactive
536 * --exec
537 * --keep-empty
538 * --autosquash
539 * --edit-todo
540 * --root when used in combination with --onto
541
542Other incompatible flag pairs:
543
544 * --preserve-merges and --interactive
545 * --preserve-merges and --signoff
546 * --preserve-merges and --rebase-merges
547 * --rebase-merges and --strategy
548 * --rebase-merges and --strategy-option
549
550BEHAVIORAL DIFFERENCES
551-----------------------
552
553 * empty commits:
554
555 am-based rebase will drop any "empty" commits, whether the
556 commit started empty (had no changes relative to its parent to
557 start with) or ended empty (all changes were already applied
558 upstream in other commits).
559
560 merge-based rebase does the same.
561
562 interactive-based rebase will by default drop commits that
563 started empty and halt if it hits a commit that ended up empty.
564 The `--keep-empty` option exists for interactive rebases to allow
565 it to keep commits that started empty.
566
567 * directory rename detection:
568
569 merge-based and interactive-based rebases work fine with
570 directory rename detection. am-based rebases sometimes do not.
Junio C Hamanoa9701f02010-01-21 00:42:16571
Junio C Hamano97f518c2006-06-22 19:49:35572include::merge-strategies.txt[]
573
Junio C Hamano6112cad2006-05-02 07:28:06574NOTES
575-----
Junio C Hamano7d06a8a2008-10-20 05:42:33576
Junio C Hamano1aa40d22010-01-21 17:46:43577You should understand the implications of using 'git rebase' on a
Junio C Hamano7d06a8a2008-10-20 05:42:33578repository that you share. See also RECOVERING FROM UPSTREAM REBASE
579below.
Junio C Hamano6112cad2006-05-02 07:28:06580
Junio C Hamanoba4b9282008-07-06 05:20:31581When the git-rebase command is run, it will first execute a "pre-rebase"
Junio C Hamano6112cad2006-05-02 07:28:06582hook if one exists. You can use this hook to do sanity checks and
583reject the rebase if it isn't appropriate. Please see the template
584pre-rebase hook script for an example.
585
Junio C Hamano0578b222008-03-11 22:50:03586Upon completion, <branch> will be the current branch.
Junio C Hamano6112cad2006-05-02 07:28:06587
Junio C Hamano1d90cb02007-07-03 07:05:31588INTERACTIVE MODE
589----------------
590
591Rebasing interactively means that you have a chance to edit the commits
592which are rebased. You can reorder the commits, and you can
593remove them (weeding out bad or otherwise unwanted patches).
594
595The interactive mode is meant for this type of workflow:
596
5971. have a wonderful idea
5982. hack on the code
5993. prepare a series for submission
6004. submit
601
602where point 2. consists of several instances of
603
Junio C Hamano0ff98162012-03-31 18:19:09604a) regular use
605
Junio C Hamano1d90cb02007-07-03 07:05:31606 1. finish something worthy of a commit
607 2. commit
Junio C Hamano0ff98162012-03-31 18:19:09608
609b) independent fixup
610
Junio C Hamano1d90cb02007-07-03 07:05:31611 1. realize that something does not work
612 2. fix that
613 3. commit it
614
615Sometimes the thing fixed in b.2. cannot be amended to the not-quite
616perfect commit it fixes, because that commit is buried deeply in a
617patch series. That is exactly what interactive rebase is for: use it
618after plenty of "a"s and "b"s, by rearranging and editing
619commits, and squashing multiple commits into one.
620
621Start it with the last commit you want to retain as-is:
622
623git rebase -i <after-this-commit>
624
625An editor will be fired up with all the commits in your current branch
626(ignoring merge commits), which come after the given commit. You can
627reorder the commits in this list to your heart's content, and you can
628remove them. The list looks more or less like this:
629
630-------------------------------------------
631pick deadbee The oneline of this commit
632pick fa1afe1 The oneline of the next commit
633...
634-------------------------------------------
635
Junio C Hamano1aa40d22010-01-21 17:46:43636The oneline descriptions are purely for your pleasure; 'git rebase' will
Junio C Hamano1d90cb02007-07-03 07:05:31637not look at them but at the commit names ("deadbee" and "fa1afe1" in this
638example), so do not delete or edit the names.
639
640By replacing the command "pick" with the command "edit", you can tell
Junio C Hamano1aa40d22010-01-21 17:46:43641'git rebase' to stop after applying that commit, so that you can edit
Junio C Hamano1d90cb02007-07-03 07:05:31642the files and/or the commit message, amend the commit, and continue
643rebasing.
644
Junio C Hamano920a6952018-11-02 05:00:42645To interrupt the rebase (just like an "edit" command would do, but without
646cherry-picking any commit first), use the "break" command.
647
Junio C Hamano3d23a0a2009-10-19 08:04:30648If you just want to edit the commit message for a commit, replace the
649command "pick" with the command "reword".
650
Junio C Hamanod7ed4042015-08-03 19:43:00651To drop a commit, replace the command "pick" with "drop", or just
652delete the matching line.
653
Junio C Hamano1d90cb02007-07-03 07:05:31654If you want to fold two or more commits into one, replace the command
Junio C Hamanoa9701f02010-01-21 00:42:16655"pick" for the second and subsequent commits with "squash" or "fixup".
656If the commits had different authors, the folded commit will be
657attributed to the author of the first commit. The suggested commit
658message for the folded commit is the concatenation of the commit
659messages of the first commit and of those with the "squash" command,
660but omits the commit messages of commits with the "fixup" command.
Junio C Hamano1d90cb02007-07-03 07:05:31661
Junio C Hamano1aa40d22010-01-21 17:46:43662'git rebase' will stop when "pick" has been replaced with "edit" or
Junio C Hamano3d23a0a2009-10-19 08:04:30663when a command fails due to merge errors. When you are done editing
664and/or resolving conflicts you can continue with `git rebase --continue`.
Junio C Hamano1d90cb02007-07-03 07:05:31665
666For example, if you want to reorder the last 5 commits, such that what
667was HEAD~4 becomes the new HEAD. To achieve that, you would call
Junio C Hamano1aa40d22010-01-21 17:46:43668'git rebase' like this:
Junio C Hamano1d90cb02007-07-03 07:05:31669
670----------------------
671$ git rebase -i HEAD~5
672----------------------
673
674And move the first patch to the end of the list.
675
676You might want to preserve merges, if you have a history like this:
677
678------------------
679 X
680 \
681 A---M---B
682 /
683---o---O---P---Q
684------------------
685
686Suppose you want to rebase the side branch starting at "A" to "Q". Make
687sure that the current HEAD is "B", and call
688
689-----------------------------
690$ git rebase -i -p --onto Q O
691-----------------------------
692
Junio C Hamano53ba6d02010-08-22 07:25:12693Reordering and editing commits usually creates untested intermediate
694steps. You may want to check that your history editing did not break
695anything by running a test, or at least recompiling at intermediate
696points in history by using the "exec" command (shortcut "x"). You may
697do so by creating a todo list like this one:
698
699-------------------------------------------
700pick deadbee Implement feature XXX
701fixup f1a5c00 Fix to feature XXX
702exec make
703pick c0ffeee The oneline of the next commit
704edit deadbab The oneline of the commit after
705exec cd subdir; make test
706...
707-------------------------------------------
708
709The interactive rebase will stop when a command fails (i.e. exits with
710non-0 status) to give you an opportunity to fix the problem. You can
711continue with `git rebase --continue`.
712
713The "exec" command launches the command in a shell (the one specified
714in `$SHELL`, or the default shell if `$SHELL` is not set), so you can
715use shell features (like "cd", ">", ";" ...). The command is run from
716the root of the working tree.
Junio C Hamanodbb64592007-09-01 11:17:39717
Junio C Hamano644936c2012-06-28 23:05:14718----------------------------------
719$ git rebase -i --exec "make test"
720----------------------------------
721
722This command lets you check that intermediate commits are compilable.
723The todo list becomes like that:
724
725--------------------
726pick 5928aea one
727exec make test
728pick 04d0fda two
729exec make test
730pick ba46169 three
731exec make test
732pick f4593f9 four
733exec make test
734--------------------
735
Junio C Hamanodbb64592007-09-01 11:17:39736SPLITTING COMMITS
737-----------------
738
739In interactive mode, you can mark commits with the action "edit". However,
Junio C Hamano1aa40d22010-01-21 17:46:43740this does not necessarily mean that 'git rebase' expects the result of this
Junio C Hamanodbb64592007-09-01 11:17:39741edit to be exactly one commit. Indeed, you can undo the commit, or you can
742add other commits. This can be used to split a commit into two:
743
Junio C Hamanofce7c7e2008-07-02 03:06:38744- Start an interactive rebase with `git rebase -i <commit>^`, where
Junio C Hamanodbb64592007-09-01 11:17:39745 <commit> is the commit you want to split. In fact, any commit range
746 will do, as long as it contains that commit.
747
748- Mark the commit you want to split with the action "edit".
749
Junio C Hamanofce7c7e2008-07-02 03:06:38750- When it comes to editing that commit, execute `git reset HEAD^`. The
Junio C Hamanodbb64592007-09-01 11:17:39751 effect is that the HEAD is rewound by one, and the index follows suit.
752 However, the working tree stays the same.
753
754- Now add the changes to the index that you want to have in the first
Junio C Hamanofce7c7e2008-07-02 03:06:38755 commit. You can use `git add` (possibly interactively) or
Junio C Hamano1aa40d22010-01-21 17:46:43756 'git gui' (or both) to do that.
Junio C Hamanodbb64592007-09-01 11:17:39757
758- Commit the now-current index with whatever commit message is appropriate
759 now.
760
761- Repeat the last two steps until your working tree is clean.
762
Junio C Hamanofce7c7e2008-07-02 03:06:38763- Continue the rebase with `git rebase --continue`.
Junio C Hamanodbb64592007-09-01 11:17:39764
765If you are not absolutely sure that the intermediate revisions are
766consistent (they compile, pass the testsuite, etc.) you should use
Junio C Hamano1aa40d22010-01-21 17:46:43767'git stash' to stash away the not-yet-committed changes
Junio C Hamanodbb64592007-09-01 11:17:39768after each commit, test, and amend the commit if fixes are necessary.
769
770
Junio C Hamano7d06a8a2008-10-20 05:42:33771RECOVERING FROM UPSTREAM REBASE
772-------------------------------
773
774Rebasing (or any other form of rewriting) a branch that others have
775based work on is a bad idea: anyone downstream of it is forced to
776manually fix their history. This section explains how to do the fix
777from the downstream's point of view. The real fix, however, would be
778to avoid rebasing the upstream in the first place.
779
780To illustrate, suppose you are in a situation where someone develops a
781'subsystem' branch, and you are working on a 'topic' that is dependent
782on this 'subsystem'. You might end up with a history like the
783following:
784
785------------
Junio C Hamano387ce232017-07-12 23:01:13786 o---o---o---o---o---o---o---o master
Junio C Hamano7d06a8a2008-10-20 05:42:33787 \
788 o---o---o---o---o subsystem
789 \
790 *---*---* topic
791------------
792
793If 'subsystem' is rebased against 'master', the following happens:
794
795------------
796 o---o---o---o---o---o---o---o master
797 \ \
798 o---o---o---o---o o'--o'--o'--o'--o' subsystem
799 \
800 *---*---* topic
801------------
802
803If you now continue development as usual, and eventually merge 'topic'
804to 'subsystem', the commits from 'subsystem' will remain duplicated forever:
805
806------------
807 o---o---o---o---o---o---o---o master
808 \ \
809 o---o---o---o---o o'--o'--o'--o'--o'--M subsystem
810 \ /
811 *---*---*-..........-*--* topic
812------------
813
814Such duplicates are generally frowned upon because they clutter up
815history, making it harder to follow. To clean things up, you need to
816transplant the commits on 'topic' to the new 'subsystem' tip, i.e.,
817rebase 'topic'. This becomes a ripple effect: anyone downstream from
818'topic' is forced to rebase too, and so on!
819
820There are two kinds of fixes, discussed in the following subsections:
821
822Easy case: The changes are literally the same.::
823
824This happens if the 'subsystem' rebase was a simple rebase and
825had no conflicts.
826
827Hard case: The changes are not the same.::
828
829This happens if the 'subsystem' rebase had conflicts, or used
Junio C Hamanob76a6862012-05-02 22:02:46830`--interactive` to omit, edit, squash, or fixup commits; or
831if the upstream used one of `commit --amend`, `reset`, or
Junio C Hamano7d06a8a2008-10-20 05:42:33832`filter-branch`.
833
834
835The easy case
836~~~~~~~~~~~~~
837
838Only works if the changes (patch IDs based on the diff contents) on
839'subsystem' are literally the same before and after the rebase
840'subsystem' did.
841
Junio C Hamano1aa40d22010-01-21 17:46:43842In that case, the fix is easy because 'git rebase' knows to skip
Junio C Hamano7d06a8a2008-10-20 05:42:33843changes that are already present in the new upstream. So if you say
844(assuming you're on 'topic')
845------------
846 $ git rebase subsystem
847------------
848you will end up with the fixed history
849------------
850 o---o---o---o---o---o---o---o master
851 \
852 o'--o'--o'--o'--o' subsystem
853 \
854 *---*---* topic
855------------
856
857
858The hard case
859~~~~~~~~~~~~~
860
861Things get more complicated if the 'subsystem' changes do not exactly
862correspond to the ones before the rebase.
863
864NOTE: While an "easy case recovery" sometimes appears to be successful
865 even in the hard case, it may have unintended consequences. For
866 example, a commit that was removed via `git rebase
Junio C Hamanob76a6862012-05-02 22:02:46867 --interactive` will be **resurrected**!
Junio C Hamano7d06a8a2008-10-20 05:42:33868
Junio C Hamano1aa40d22010-01-21 17:46:43869The idea is to manually tell 'git rebase' "where the old 'subsystem'
Junio C Hamano7d06a8a2008-10-20 05:42:33870ended and your 'topic' began", that is, what the old merge-base
871between them was. You will have to find a way to name the last commit
872of the old 'subsystem', for example:
873
Junio C Hamano1aa40d22010-01-21 17:46:43874* With the 'subsystem' reflog: after 'git fetch', the old tip of
Junio C Hamanob76a6862012-05-02 22:02:46875 'subsystem' is at `subsystem@{1}`. Subsequent fetches will
Junio C Hamano7d06a8a2008-10-20 05:42:33876 increase the number. (See linkgit:git-reflog[1].)
877
878* Relative to the tip of 'topic': knowing that your 'topic' has three
879 commits, the old tip of 'subsystem' must be `topic~3`.
880
881You can then transplant the old `subsystem..topic` to the new tip by
882saying (for the reflog case, and assuming you are on 'topic' already):
883------------
884 $ git rebase --onto subsystem subsystem@{1}
885------------
886
887The ripple effect of a "hard case" recovery is especially bad:
888'everyone' downstream from 'topic' will now have to perform a "hard
889case" recovery too!
890
Junio C Hamanob9d9d902018-05-23 07:07:42891REBASING MERGES
Junio C Hamanoea1ac8d2018-07-18 20:16:48892---------------
Junio C Hamanob9d9d902018-05-23 07:07:42893
894The interactive rebase command was originally designed to handle
895individual patch series. As such, it makes sense to exclude merge
896commits from the todo list, as the developer may have merged the
897then-current `master` while working on the branch, only to rebase
898all the commits onto `master` eventually (skipping the merge
899commits).
900
901However, there are legitimate reasons why a developer may want to
902recreate merge commits: to keep the branch structure (or "commit
903topology") when working on multiple, inter-related branches.
904
905In the following example, the developer works on a topic branch that
906refactors the way buttons are defined, and on another topic branch
907that uses that refactoring to implement a "Report a bug" button. The
908output of `git log --graph --format=%s -5` may look like this:
909
910------------
911* Merge branch 'report-a-bug'
912|\
913| * Add the feedback button
914* | Merge branch 'refactor-button'
915|\ \
916| |/
917| * Use the Button class for all buttons
918| * Extract a generic Button class from the DownloadButton one
919------------
920
921The developer might want to rebase those commits to a newer `master`
922while keeping the branch topology, for example when the first topic
923branch is expected to be integrated into `master` much earlier than the
924second one, say, to resolve merge conflicts with changes to the
925DownloadButton class that made it into `master`.
926
927This rebase can be performed using the `--rebase-merges` option.
928It will generate a todo list looking like this:
929
930------------
931label onto
932
933# Branch: refactor-button
934reset onto
935pick 123456 Extract a generic Button class from the DownloadButton one
936pick 654321 Use the Button class for all buttons
937label refactor-button
938
939# Branch: report-a-bug
940reset refactor-button # Use the Button class for all buttons
941pick abcdef Add the feedback button
942label report-a-bug
943
944reset onto
945merge -C a1b2c3 refactor-button # Merge 'refactor-button'
946merge -C 6f5e4d report-a-bug # Merge 'report-a-bug'
947------------
948
949In contrast to a regular interactive rebase, there are `label`, `reset`
950and `merge` commands in addition to `pick` ones.
951
952The `label` command associates a label with the current HEAD when that
953command is executed. These labels are created as worktree-local refs
954(`refs/rewritten/<label>`) that will be deleted when the rebase
955finishes. That way, rebase operations in multiple worktrees linked to
956the same repository do not interfere with one another. If the `label`
957command fails, it is rescheduled immediately, with a helpful message how
958to proceed.
959
960The `reset` command resets the HEAD, index and worktree to the specified
Junio C Hamano32a75272018-10-16 07:37:35961revision. It is similar to an `exec git reset --hard <label>`, but
Junio C Hamanob9d9d902018-05-23 07:07:42962refuses to overwrite untracked files. If the `reset` command fails, it is
963rescheduled immediately, with a helpful message how to edit the todo list
964(this typically happens when a `reset` command was inserted into the todo
965list manually and contains a typo).
966
Junio C Hamanof09b7cd2018-08-02 23:01:45967The `merge` command will merge the specified revision(s) into whatever
968is HEAD at that time. With `-C <original-commit>`, the commit message of
Junio C Hamanob9d9d902018-05-23 07:07:42969the specified merge commit will be used. When the `-C` is changed to
970a lower-case `-c`, the message will be opened in an editor after a
971successful merge so that the user can edit the message.
972
973If a `merge` command fails for any reason other than merge conflicts (i.e.
974when the merge operation did not even start), it is rescheduled immediately.
975
976At this time, the `merge` command will *always* use the `recursive`
Junio C Hamanof09b7cd2018-08-02 23:01:45977merge strategy for regular merges, and `octopus` for octopus merges,
978strategy, with no way to choose a different one. To work around
Junio C Hamanob9d9d902018-05-23 07:07:42979this, an `exec` command can be used to call `git merge` explicitly,
980using the fact that the labels are worktree-local refs (the ref
981`refs/rewritten/onto` would correspond to the label `onto`, for example).
982
983Note: the first command (`label onto`) labels the revision onto which
984the commits are rebased; The name `onto` is just a convention, as a nod
985to the `--onto` option.
986
987It is also possible to introduce completely new merge commits from scratch
988by adding a command of the form `merge <merge-head>`. This form will
989generate a tentative commit message and always open an editor to let the
990user edit it. This can be useful e.g. when a topic branch turns out to
991address more than a single concern and wants to be split into two or
992even more topic branches. Consider this todo list:
993
994------------
995pick 192837 Switch from GNU Makefiles to CMake
996pick 5a6c7e Document the switch to CMake
997pick 918273 Fix detection of OpenSSL in CMake
998pick afbecd http: add support for TLS v1.3
999pick fdbaec Fix detection of cURL in CMake on Windows
1000------------
1001
1002The one commit in this list that is not related to CMake may very well
1003have been motivated by working on fixing all those bugs introduced by
1004switching to CMake, but it addresses a different concern. To split this
1005branch into two topic branches, the todo list could be edited like this:
1006
1007------------
1008label onto
1009
1010pick afbecd http: add support for TLS v1.3
1011label tlsv1.3
1012
1013reset onto
1014pick 192837 Switch from GNU Makefiles to CMake
1015pick 918273 Fix detection of OpenSSL in CMake
1016pick fdbaec Fix detection of cURL in CMake on Windows
1017pick 5a6c7e Document the switch to CMake
1018label cmake
1019
1020reset onto
1021merge tlsv1.3
1022merge cmake
1023------------
1024
Junio C Hamanobb88cf42010-06-21 15:23:551025BUGS
1026----
1027The todo list presented by `--preserve-merges --interactive` does not
1028represent the topology of the revision graph. Editing commits and
1029rewording their commit messages should work fine, but attempts to
Junio C Hamanob9d9d902018-05-23 07:07:421030reorder commits tend to produce counterintuitive results. Use
1031`--rebase-merges` in such scenarios instead.
Junio C Hamanobb88cf42010-06-21 15:23:551032
1033For example, an attempt to rearrange
1034------------
10351 --- 2 --- 3 --- 4 --- 5
1036------------
1037to
1038------------
10391 --- 2 --- 4 --- 3 --- 5
1040------------
1041by moving the "pick 4" line will result in the following history:
1042------------
10433
1044 /
10451 --- 2 --- 4 --- 5
1046------------
1047
Junio C Hamano1a4e8412005-12-27 08:17:231048GIT
1049---
Junio C Hamanof7c042d2008-06-06 22:50:531050Part of the linkgit:git[1] suite