So imagine you have 3 branches, where F1
is based on master
and F2
depends on F1
*-*-* (master)
\ %-%-% (F1)
\ x-x-x (F2)
To have F2
up-to-date with F1
you rebase it like
git checkout F2
git rebase F1
or, if someone else is pushing to F1
besides you and your local F1
might be not up-to-date, you do:
git checkout F2
git fetch
git rebase origin/F1
Now, the work in the F1
branch is done and it's finally been merged into the master.
The problem though, is that F2
is still based on top of F1
and contains its commits, so when you open a pull request for F2
against the master
it will contain the changes that do not make sense (commits from F1
that got merged already).
The git tree looks like this now:
*-*-*-%-%-% (master)
\
%-%-%-x-x-x (F2)
What we want here is to have our remaining F2
feature branch to be up-to-date with the master
and contain only the relevant commits.
This can be done with --onto rebase flag. So you can do this:
# just to make sure the F2 is up to date with the F1 first
git checkout F2
git rebase F1
# then change the base to be master
git rebase --onto master F1
That'll turn your git tree to be like this instead:
*-*-*-%-%-% (master)
\
x-x-x (F2)
After this, the commits in your pull request for F2 -> master
will make sense again.
Top comments (0)