Let's consider the following scenario: we have a main branch, main, and we have worked on a new feature
by breaking it down into two successive branches, featA and featB.
main featA featB
| | |
v v v
ca--c1--c2--c3--c4--c5
Commits have been added to the main branch, and we would like to rebase our branches onto the new version of
main.
main
|
v
ca--cb--cc
To do this, we will perform two successive rebases: a simple one first, followed by one using the
--onto command.
git rebase main featA
git rebase --onto featA c3 featB
The --onto command allows us to rebase a range of commits. Here, we are rebasing the commit range from
c3 (exclusive) to featB onto featA, which includes commits c4--c5.
By comparison, a simple rebase would have also rebased the commits from the old featA branch, resulting
in duplicate commits c1--c2--c3.
We finally obtain the following commit tree:
main featA featB
| | |
v v v
ca--cb--cc--c1'--c2'--c3'--c4'--c5'