start - GitFlow: fusionar con seguridad desarrollar cambios en una rama de características
git flow windows (3)
Recientemente comencé a trabajar en grandes características, así que creé una nueva feature/xyz
rama feature/xyz
. El problema es que esta función es grande, por lo que me tomará ~ 3 meses completarla. Me gustaría fusionar de forma segura el progreso que se ha hecho en el develop
de mi rama de características, sin preocuparme de que los cambios de la rama de develop
anularán las actualizaciones que ya hice en mi rama de características. Mi intento anterior de fusionar develop
a feature/xyz
terminó en algunos cambios que ya hice en la nueva característica que se está revertiendo.
¿Cuál sería el comando para lograr esto? Gracias
La única seguridad está en las combinaciones aprendidas, discernidas y frecuentes.
Solo usted comprende cómo se alinean el código en develop
y la feature/xyz
, nadie más. Es solo usted quien puede fusionar los dos flujos correctamente de una manera discernible. Incluso con las estrategias de fusión predeterminadas, que son mucho menos peligrosas que las -X theirs
o las -X theirs
, siempre hay que revisar el resultado.
Puede que necesites ayuda, por supuesto, y git te ofrecerá algo. Por ejemplo, puede usar las resoluciones grabadas de git; rerere a rerere para ayudar a tomar la misma decisión de fusión correcta después de haber tomado una inicialmente.
Un modelo bastante común y relativamente simple, que utiliza los nombres que ha proporcionado para las sucursales, podría funcionar para usted de esta manera.
-
develop
es la rama donde se produce el impulso principal del desarrollo. -
xyz
es la rama donde desarrollas la característica xyz -
xyz_stage
es la rama donde se fusionan el código dedevelop
y el códigoxyz
, manteniendo esta rama estable en línea con los puntos estables respectivos dedevelop
yxyz
. Esta es también la rama que eventualmente fusionarías con el desarrollo cuando estés listo para lanzar la característica xyz o parte de ella.
Lo anterior asume que no solo fusiona xyz
en xyz_stage
sino que también fusiona el develop
en xyz_stage
de vez en cuando y asegúrese de que las porciones de xyz
liberadas hasta el xyz_stage
trabajo de xyz_stage
y de que pasen las pruebas pertinentes junto con el código de develop
.
Sin embargo, todavía tiene que elegir cómo hacer la rama xyz
, donde trabaja en la función, consciente del progreso en el desarrollo.
La opción más limpia es: no lo hagas saber. Es por eso que tiene xyz_stage
donde los dos flujos de desarrollo se unen. Este enfoque es factible y sano siempre que el desarrollo de xyz
no sea prolongado.
La segunda opción es fusionar xyz_stage
nuevo en xyz
cuando esté satisfecho con la rama de ensayo. De esa manera, tendrá un punto estable en el que podrá continuar y desarrollar la función xyz
en la parte superior.
Aquí hay una simple ilustración del proceso, con comentarios:
En mi experiencia, la única solución "segura" es inspeccionar y probar siempre el resultado de cualquier combinación de forma manual. --no-commit realizará la fusión y le permitirá inspeccionarla antes de cometer, o puede restablecer / enmendar, lo que le parezca más práctico. Obtener una herramienta de combinación de tres vías puede ser muy útil. Hay demasiadas formas en que las cosas se pueden romper sin que haya conflictos de fusión, por lo que depender de la fusión automática puede causarle problemas. Si tiene una cobertura de prueba del 100%, seguro, puede estar un poco más relajado, pero ¿cuántos proyectos pueden realmente afirmar eso? ;-)
Usa git merge -s recursive -X ours
. Esto causará que los conflictos en las dos ramas se resuelvan siempre usando la versión en el directorio desprotegido ( feature/xyz
en este caso).
Importante : al contrario de su título, esta estrategia no es necesariamente "segura" : las modificaciones de develop
pueden entrar en conflicto con las feature/xyz
. Como siempre, asegúrese de probar correctamente los cambios combinados.