Documentation: Transplanting branch with git-rebase --onto

Added example of transplantig feature branch from one development
branch (for example "next") into the other development branch (for
example "master").

[jc: talking Carl's advice this contains both examples sent to
 the list by Jakub in his original message.]

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Jakub Narebski 2006-11-06 19:12:45 +01:00 committed by Junio C Hamano
parent 9faed78f59
commit e52775f438
1 changed files with 57 additions and 8 deletions

View File

@ -51,20 +51,69 @@ would be:
D---E---F---G master D---E---F---G master
------------ ------------


While, starting from the same point, the result of either of the following The latter form is just a short-hand of `git checkout topic`
commands: followed by `git rebase master`.


git-rebase --onto master~1 master Here is how you would transplant a topic branch based on one
git-rebase --onto master~1 master topic branch to another, to pretend that you forked the topic branch
from the latter branch, using `rebase --onto`.


would be: First let's assume your 'topic' is based on branch 'next'.
For example feature developed in 'topic' depends on some
functionality which is found in 'next'.


------------ ------------
A'--B'--C' topic o---o---o---o---o master
\
o---o---o---o---o next
\
o---o---o topic
------------

We would want to make 'topic' forked from branch 'master',
for example because the functionality 'topic' branch depend on
got merged into more stable 'master' branch, like this:

------------
o---o---o---o---o master
| \
| o'--o'--o' topic
\
o---o---o---o---o next
------------

We can get this using the following command:

git-rebase --onto master next topic


Another example of --onto option is to rebase part of a
branch. If we have the following situation:

------------
H---I---J topicB
/ /
D---E---F---G master E---F---G topicA
/
A---B---C---D master
------------ ------------


then the command

git-rebase --onto master topicA topicB

would result in:

------------
H'--I'--J' topicB
/
| E---F---G topicA
|/
A---B---C---D master
------------

This is useful when topicB does not depend on topicA.

In case of conflict, git-rebase will stop at the first problematic commit In case of conflict, git-rebase will stop at the first problematic commit
and leave conflict markers in the tree. You can use git diff to locate and leave conflict markers in the tree. You can use git diff to locate
the markers (<<<<<<) and make edits to resolve the conflict. For each the markers (<<<<<<) and make edits to resolve the conflict. For each