~ubuntu-branches/ubuntu/intrepid/git-core/intrepid-updates

« back to all changes in this revision

Viewing changes to Documentation/git-rebase.txt

  • Committer: Package Import Robot
  • Author(s): Gerrit Pape
  • Date: 2007-10-04 08:27:01 UTC
  • mfrom: (1.1.23)
  • Revision ID: package-import@ubuntu.com-20071004082701-rsd058ontoqz4i30
Tags: 1:1.5.3.4-1
new upstream point release (closes: #445188).

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
SYNOPSIS
9
9
--------
10
10
[verse]
11
 
'git-rebase' [-v] [--merge] [-C<n>] [--onto <newbase>] <upstream> [<branch>]
 
11
'git-rebase' [-i | --interactive] [-v | --verbose] [-m | --merge] [-C<n>]
 
12
        [-p | --preserve-merges] [--onto <newbase>] <upstream> [<branch>]
12
13
'git-rebase' --continue | --skip | --abort
13
14
 
14
15
DESCRIPTION
129
130
 
130
131
then the command
131
132
 
132
 
    git-rebase --onto topicA~5 topicA~2 topicA
 
133
    git-rebase --onto topicA~5 topicA~3 topicA
133
134
 
134
135
would result in the removal of commits F and G:
135
136
 
187
188
--skip::
188
189
        Restart the rebasing process by skipping the current patch.
189
190
 
190
 
--merge::
 
191
-m, \--merge::
191
192
        Use merging strategies to rebase.  When the recursive (default) merge
192
193
        strategy is used, this allows rebase to be aware of renames on the
193
194
        upstream side.
208
209
        context exist they all must match.  By default no context is
209
210
        ever ignored.
210
211
 
 
212
-i, \--interactive::
 
213
        Make a list of the commits which are about to be rebased.  Let the
 
214
        user edit that list before rebasing.  This mode can also be used to
 
215
        split commits (see SPLITTING COMMITS below).
 
216
 
 
217
-p, \--preserve-merges::
 
218
        Instead of ignoring merges, try to recreate them.  This option
 
219
        only works in interactive mode.
 
220
 
211
221
include::merge-strategies.txt[]
212
222
 
213
223
NOTES
226
236
You must be in the top directory of your project to start (or continue)
227
237
a rebase.  Upon completion, <branch> will be the current branch.
228
238
 
229
 
Author
 
239
INTERACTIVE MODE
 
240
----------------
 
241
 
 
242
Rebasing interactively means that you have a chance to edit the commits
 
243
which are rebased.  You can reorder the commits, and you can
 
244
remove them (weeding out bad or otherwise unwanted patches).
 
245
 
 
246
The interactive mode is meant for this type of workflow:
 
247
 
 
248
1. have a wonderful idea
 
249
2. hack on the code
 
250
3. prepare a series for submission
 
251
4. submit
 
252
 
 
253
where point 2. consists of several instances of
 
254
 
 
255
a. regular use
 
256
 1. finish something worthy of a commit
 
257
 2. commit
 
258
b. independent fixup
 
259
 1. realize that something does not work
 
260
 2. fix that
 
261
 3. commit it
 
262
 
 
263
Sometimes the thing fixed in b.2. cannot be amended to the not-quite
 
264
perfect commit it fixes, because that commit is buried deeply in a
 
265
patch series.  That is exactly what interactive rebase is for: use it
 
266
after plenty of "a"s and "b"s, by rearranging and editing
 
267
commits, and squashing multiple commits into one.
 
268
 
 
269
Start it with the last commit you want to retain as-is:
 
270
 
 
271
        git rebase -i <after-this-commit>
 
272
 
 
273
An editor will be fired up with all the commits in your current branch
 
274
(ignoring merge commits), which come after the given commit.  You can
 
275
reorder the commits in this list to your heart's content, and you can
 
276
remove them.  The list looks more or less like this:
 
277
 
 
278
-------------------------------------------
 
279
pick deadbee The oneline of this commit
 
280
pick fa1afe1 The oneline of the next commit
 
281
...
 
282
-------------------------------------------
 
283
 
 
284
The oneline descriptions are purely for your pleasure; `git-rebase` will
 
285
not look at them but at the commit names ("deadbee" and "fa1afe1" in this
 
286
example), so do not delete or edit the names.
 
287
 
 
288
By replacing the command "pick" with the command "edit", you can tell
 
289
`git-rebase` to stop after applying that commit, so that you can edit
 
290
the files and/or the commit message, amend the commit, and continue
 
291
rebasing.
 
292
 
 
293
If you want to fold two or more commits into one, replace the command
 
294
"pick" with "squash" for the second and subsequent commit.  If the
 
295
commits had different authors, it will attribute the squashed commit to
 
296
the author of the first commit.
 
297
 
 
298
In both cases, or when a "pick" does not succeed (because of merge
 
299
errors), the loop will stop to let you fix things, and you can continue
 
300
the loop with `git rebase --continue`.
 
301
 
 
302
For example, if you want to reorder the last 5 commits, such that what
 
303
was HEAD~4 becomes the new HEAD. To achieve that, you would call
 
304
`git-rebase` like this:
 
305
 
 
306
----------------------
 
307
$ git rebase -i HEAD~5
 
308
----------------------
 
309
 
 
310
And move the first patch to the end of the list.
 
311
 
 
312
You might want to preserve merges, if you have a history like this:
 
313
 
 
314
------------------
 
315
           X
 
316
            \
 
317
         A---M---B
 
318
        /
 
319
---o---O---P---Q
 
320
------------------
 
321
 
 
322
Suppose you want to rebase the side branch starting at "A" to "Q". Make
 
323
sure that the current HEAD is "B", and call
 
324
 
 
325
-----------------------------
 
326
$ git rebase -i -p --onto Q O
 
327
-----------------------------
 
328
 
 
329
 
 
330
SPLITTING COMMITS
 
331
-----------------
 
332
 
 
333
In interactive mode, you can mark commits with the action "edit".  However,
 
334
this does not necessarily mean that 'git rebase' expects the result of this
 
335
edit to be exactly one commit.  Indeed, you can undo the commit, or you can
 
336
add other commits.  This can be used to split a commit into two:
 
337
 
 
338
- Start an interactive rebase with 'git rebase -i <commit>^', where
 
339
  <commit> is the commit you want to split.  In fact, any commit range
 
340
  will do, as long as it contains that commit.
 
341
 
 
342
- Mark the commit you want to split with the action "edit".
 
343
 
 
344
- When it comes to editing that commit, execute 'git reset HEAD^'.  The
 
345
  effect is that the HEAD is rewound by one, and the index follows suit.
 
346
  However, the working tree stays the same.
 
347
 
 
348
- Now add the changes to the index that you want to have in the first
 
349
  commit.  You can use gitlink:git-add[1] (possibly interactively) and/or
 
350
  gitlink:git-gui[1] to do that.
 
351
 
 
352
- Commit the now-current index with whatever commit message is appropriate
 
353
  now.
 
354
 
 
355
- Repeat the last two steps until your working tree is clean.
 
356
 
 
357
- Continue the rebase with 'git rebase --continue'.
 
358
 
 
359
If you are not absolutely sure that the intermediate revisions are
 
360
consistent (they compile, pass the testsuite, etc.) you should use
 
361
gitlink:git-stash[1] to stash away the not-yet-committed changes
 
362
after each commit, test, and amend the commit if fixes are necessary.
 
363
 
 
364
 
 
365
Authors
230
366
------
231
 
Written by Junio C Hamano <junkio@cox.net>
 
367
Written by Junio C Hamano <junkio@cox.net> and
 
368
Johannes E. Schindelin <johannes.schindelin@gmx.de>
232
369
 
233
370
Documentation
234
371
--------------
237
374
GIT
238
375
---
239
376
Part of the gitlink:git[7] suite
240