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'