Let's say that we have two versions of a library X: v1 and v2
I'm a maintainer for another library Y which uses library X. I was using v1 of the library, and it is there in master.
Then library X has come up with a new version v2, which required me to change the way I use the library (only package changes, library X changed it's name). Version v1 is now deprecated.
However, because my library is currently being used by enterprise users, who are not willing to update to a newer version of my library that uses v2. Also I'm supposed to provide fixes to the old version by contract.
I had two branches now:
- master (uses v1)
- new_master (uses v2)
The way I made this change is by developing on master, and rebasing new_master onto master. Then I can have one commit which contains changes that change all the v1 packages to v2 packages (import lines are the only changes).
master x----x----x----x----x----n
new_master x----x----x----x----x----f
(after rebase)
master x----x----x----x----x----n
new_master x----x----x----x----x----n----f
Now, I added a new feature to my library, which needs v2 of the library X. So it will only exist in new_master. After adding the new feature, the tree became like this.
master x----x----x----x----x----x----n
new_master x----x----x----x----x----x----f----n
I can do the same rebase here, but the commit n
in the master tree needs to be fixed also. I don't want to add one more fix after the n
of new_master.
What I get if I do a regular re-base:
master x----x----x----x----x----x----n
new_master x----x----x----x----x----x----n----f----n----f
Second f
is the new fix commit, because after second n
commit, branch new_master
fails to compile.
What I need to get:
master x----x----x----x----x----x----n
new_master x----x----x----x----x----x----n----F----n
Where commit F
is the new fix commit.
What am I currently doing to achieve this?
- I'm solving this, by creating a new branch called
new_master2
from new_master, then removing the new feature there. - Then I'm rebasing
new_master2
onto master. - The commit for the new feature is lost, so I'm cherry-picking it from new_master.
- Finally I delete the
new_master
branch, and I renamenew_master2
as new_master. - I finish this by doing a force push to the remote.
What I'm trying to do?
Find another way to do the same thing, without creating the temp branch new_master2
.