Viniendo de mercurial, uso ramas para organizar características. Naturalmente, también quiero ver este flujo de trabajo en mi historia.
Comencé mi nuevo proyecto usando git y terminé mi primera función. Al fusionar la función, me di cuenta de que git usa el avance rápido, es decir, aplica mis cambios directamente a la rama maestra si es posible y se olvida de mi rama.
Entonces, para pensar en el futuro: soy el único que trabaja en este proyecto. Si uso el enfoque predeterminado de git (fusión de avance rápido), mi historial daría como resultado una rama maestra gigante. Nadie sabe que usé una rama separada para cada característica, porque al final solo tendré esa rama maestra gigante. ¿No te parecerá poco profesional?
Según este razonamiento, no quiero la fusión de avance rápido y no puedo ver por qué es el valor predeterminado. ¿Qué tiene de bueno?
fuente
no-ff
' con sus "confirmaciones de puntos de control" que rompen la culpa o la bisecta.-no-ff
rara vez es una buena idea, pero aún puede ayudar a mantener un historial interno de funciones mientras se registra solo una confirmación en la rama principal. Eso tiene sentido para el largo historial de características, cuando combina de vez en cuando su progresión en la rama principal.Respuestas:
La fusión de avance rápido tiene sentido para las ramas de corta duración, pero en una historia más compleja , la fusión sin avance rápido puede hacer que la historia sea más fácil de entender y facilitar la reversión de un grupo de confirmaciones.
Advertencia : el reenvío no rápido también tiene posibles efectos secundarios. Revise https://sandofsky.com/blog/git-workflow.html , evite el 'no-ff' con sus "confirmaciones de puntos de control" que rompen la bisección o la culpa, y considere cuidadosamente si debería ser su enfoque predeterminado
master
.(De nvie.com , Vincent Driessen , publique " Un modelo de ramificación Git exitoso ")
Jakub Narębski también menciona la configuración
merge.ff
:El avance rápido es el predeterminado porque:
Pero si anticipa un flujo de trabajo iterativo en un tema / rama de características (es decir, me fusiono, luego vuelvo a esta rama de características y agrego más confirmaciones), entonces es útil incluir solo la fusión en la rama principal, en lugar de todos los commits intermedios de la rama de características.
En este caso, puede terminar configurando este tipo de archivo de configuración :
El OP agrega en los comentarios:
Jefromi responde:
Más en general, agrego:
En realidad, cuando considera el modelo de rama Mercurial, está en su núcleo una rama por repositorio (aunque puede crear cabezas anónimas, marcadores e incluso ramas con nombre )
Consulte "Git y Mercurial - Comparar y contrastar" .
fuente
feature
sucursal a un repositorio público, puede rehacerlamaster
tantas veces como desee. Ver stackoverflow.com/questions/5250817/…feature
rama en lomaster
que hace que dicho historial sea lineal o no. Una simple fusión de avance rápido lo hará lineal. Lo que tiene sentido si ha limpiado el historial de esafeature
rama antes de la fusión de avance rápido, dejando solo confirmaciones significativas, como se menciona en stackoverflow.com/questions/7425541/… .Permítanme ampliar un poco en un VonC 's respuesta muy amplia :
Primero, si lo recuerdo correctamente, el hecho de que Git por defecto no crea confirmaciones de fusión en el caso de avance rápido proviene de considerar los "repositorios iguales" de una sola rama, donde se usa la atracción mutua para sincronizar esos dos repositorios (un puede encontrar el primer flujo de trabajo como primer ejemplo en la documentación de la mayoría de los usuarios, incluido "El manual del usuario de Git" y "Control de versiones con ejemplos"). En este caso, no usa pull para fusionar una rama completamente realizada, la usa para mantenerse al día con otros trabajos. No desea tener hechos efímeros y sin importancia cuando realiza una sincronización guardada y almacenada en el repositorio, guardada para el futuro.
Tenga en cuenta que la utilidad de las ramas de características y de tener múltiples ramas en un solo repositorio se produjo solo más tarde, con un uso más extendido de VCS con un buen soporte de fusión, y al probar varios flujos de trabajo basados en la fusión. Es por eso que, por ejemplo, Mercurial originalmente admitía solo una rama por repositorio (más sugerencias anónimas para rastrear ramas remotas), como se vio en revisiones anteriores de "Mercurial: la guía definitiva".
En segundo lugar, cuando se siguen las mejores prácticas de la utilización de ramas de características , a saber, que las ramas de características deben todo inicio de la versión estable (por lo general de la última versión), para ser capaz de cereza recoger y seleccionar las funciones que desea incluir seleccionando las ramas de características en combinación, se Por lo general, no están en una situación de avance rápido ... lo que hace que este problema sea discutible. Debe preocuparse por crear una verdadera fusión y no avanzar rápidamente al fusionar una primera rama (suponiendo que no coloque cambios de confirmación única directamente en 'maestro'); todas las otras fusiones posteriores son, por supuesto, en una situación que no avanza rápidamente.
HTH
fuente