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:
- Is there a way of describing and even automatically detecting the branch relationships, and then with one command try to re-enforce the described relationship (in the above simple example, after changing
feature-a
by rebasing or adding new commits to the head, perform automatically rebasingfeature-b
on the new head offeature-a
). - GUI tool for rebasing a set of branches onto other commits (simply giving error if a conflict would prevent the operation would be okay)?
- Other ideas of managing this branch mess? The accidental complexity involved is costing too much time and draining too much brain power.