En mi empresa, todo nuestro desarrollo (corrección de errores y nuevas características) se realiza en sucursales separadas. Cuando está completo, lo enviamos a QA que lo prueba en esa rama, y cuando nos dan luz verde, lo fusionamos en nuestra rama principal. Esto podría tomar entre un día y un año.
Si tratamos de exprimir cualquier refactorización en una rama, no sabemos por cuánto tiempo estará "fuera", por lo que puede causar muchos conflictos cuando se fusiona nuevamente.
Por ejemplo, supongamos que quiero cambiar el nombre de una función porque la función en la que estoy trabajando está haciendo un uso intensivo de esta función, y descubrí que su nombre realmente no se ajusta a su propósito (de nuevo, esto es solo un ejemplo). Así que voy y encuentro cada uso de esta función, y les cambio el nombre a todos por su nuevo nombre, y todo funciona perfectamente, así que lo envío a QA.
Mientras tanto, está ocurriendo un nuevo desarrollo, y mi función renombrada no existe en ninguna de las ramas que se están bifurcando en main. Cuando mi problema vuelva a fusionarse, todos se romperán.
¿Hay alguna forma de lidiar con esto?
No es que la gerencia apruebe un problema de refactorización, por lo que debe ser aplicado con otro trabajo. No se puede desarrollar directamente en main porque todos los cambios tienen que pasar por QA y nadie quiere ser el imbécil que rompió main para poder hacer un poco de refactorización no esencial.