In recent times I seem to have this repeating scenario of having multiple feature branches under development, with one feature branch (feature-b
in the below picture) depending on support of another incompleted feature (developed in feature-a
):
---o---o--o master
|
+---o---o---o feature-a
|
+----o---o feature-b
Whenever I modify feature-a
(including interactive rebasing to fix errors in the feature), I need to rebase feature-b
onto feature-a
. These are local branches, so I am free to modify them how ever I want.
More often I have the following kind of case:
master testing
---o---o--o-------------------------------------------o---o
| feature-a . .
+---o---o---o . .
| feature-b . .
+----o---o ..................... .
| feature-c .
+----o---o .......................
where testing branch is combination of all the (related) features under development, produced by merging all the relevant feature branches on it (in the picture master
, feature-b
, feature-c
– and by implication feature-a
).
Currently, especially if having more complicated feature branch relationships, I have gitk
constantly open to visualize the branch relationships, and maintain shell scripts to do this rebasing automatically, but this method seems fragile and a general nuisance. What I would like to know:
feature-a
by rebasing or adding new commits to the head, perform automatically rebasing feature-b
on the new head of feature-a
).I do not like pushing bad stuff for others to see, and I like to keep the final history look clean.
This is a bad habit. You should keep a master
and a pu
for "proposed updates". Push your commits to pu
and then rebase pu
onto master
as necessary. When the time is right you can cherry pick from pu
or even merge pu
into master
.
This is how it is done with the git repo itself. Avoid falling "down the rabbit hole" of endless branching.
related
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With