Best practices for making large scale updates to an existing design system? (Branches?)

Branching question for folks who have experience with doing large updates to your design system. How would you handle a full-blown color update to a design system?

We are currently working to apply a new color palette to an existing design system. The current color palette lives in the same library as all of the components but the new palette is in a separate library. The challenge: if we create a branch & begin applying color changes, if the main library gets updates – let’s say the input field gets a new radius --then the color changes we made in the branch to say the input fields would get overridden if we merge things back.

The idea being here that as we are making changes to our branch to apply this new color palette – the main library will be changing as well since these color updates will take some time to do.

Some ideas we’ve come up with but are not ideal

  1. Freeze all updates to the main library until all these color updates are ready to be merged back (not ideal)
  2. Make all updates needed in the branch and then merge those updates along with the color changes (not ideal because some updates should be pushed asap)
  3. Break the merge and branch process down into smaller chunks so that way we update colors to things on a say a component-by-component basis. For instance, we make color updates for buttons in a branch. Merge that back. Create a new branch and make color updates to the next component and the next one.

For context, this just an example. The View Switcher component gets an update in the Main Library to have a new radius and in the branch this Switcher component has all new color styles, when merging back to the Main file we have to reconcile this change. If we choose to keep the one from the Main file, it will override all the color style changes.