Skip to content

Commit

Permalink
Documentation: Transplanting branch with git-rebase --onto
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jakub Narebski authored and Junio C Hamano committed Nov 6, 2006
1 parent 9faed78 commit e52775f
Showing 1 changed file with 57 additions and 8 deletions.
65 changes: 57 additions & 8 deletions Documentation/git-rebase.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,69 @@ would be:
D---E---F---G master
------------

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

git-rebase --onto master~1 master
git-rebase --onto master~1 master topic
Here is how you would transplant a topic branch based on one
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
/
D---E---F---G master
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
/
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
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
Expand Down

0 comments on commit e52775f

Please sign in to comment.