¿Cuándo usarías las diferentes estrategias de combinación de git?
Desde la página de manual de git-merge, hay varias estrategias de combinación que puede utilizar.
resolver : esto solo puede resolver dos cabezas (es decir, la rama actual y otra rama de la que extrajiste) usando un algoritmo de combinación de 3 vías. Intenta detectar cuidadosamente ambigüedades en fusiones entrecruzadas y, en general, se considera seguro y rápido.
recursivo : esto solo puede resolver dos cabezas usando un algoritmo de combinación de 3 vías. Cuando hay más de un ancestro común que se puede utilizar para la fusión de 3 vías, crea un árbol fusionado de los ancestros comunes y lo utiliza como árbol de referencia para la fusión de 3 vías. Se ha informado que esto resulta en menos conflictos de fusión sin causar fusiones erróneas mediante pruebas realizadas en confirmaciones de fusión reales tomadas del historial de desarrollo del kernel de Linux 2.6. Además, esto puede detectar y manejar fusiones que implican cambios de nombre. Esta es la estrategia de fusión predeterminada al extraer o fusionar una rama.
pulpo : esto resuelve casos de más de dos cabezas, pero se niega a realizar fusiones complejas que necesitan resolución manual. Está pensado principalmente para agrupar encabezados de ramas temáticas. Esta es la estrategia de fusión predeterminada al extraer o fusionar más de una rama.
nuestro : esto resuelve cualquier número de encabezados, pero el resultado de la combinación es siempre el encabezado de rama actual. Está destinado a reemplazar el antiguo historial de desarrollo de las ramas laterales.
subárbol : esta es una estrategia recursiva modificada. Al fusionar los árboles A y B, si B corresponde a un subárbol de A, B primero se ajusta para que coincida con la estructura del árbol de A, en lugar de leer los árboles en el mismo nivel. Este ajuste también se realiza en el árbol ancestro común.
¿Cuándo debo especificar algo diferente al valor predeterminado? ¿Para qué escenarios es mejor cada uno?
No estoy familiarizado con la resolución, pero he usado los demás:
recursivo
Recursivo es el valor predeterminado para fusiones que no son de avance rápido. Todos estamos familiarizados con ese.
Pulpo
He usado pulpo cuando tenía varios árboles que necesitaban fusionarse. Esto se ve en proyectos más grandes donde muchas ramas han tenido un desarrollo independiente y todo está listo para unirse en un solo cabezal.
Una rama de pulpo fusiona varias cabezas en una confirmación siempre que pueda hacerlo de forma limpia.
A modo de ejemplo, imagine que tiene un proyecto que tiene un maestro y luego tres ramas para fusionarlas (llámelas a, b y c).
Una serie de fusiones recursivas se vería así (tenga en cuenta que la primera fusión fue un avance rápido, ya que no forcé la recursividad):
Sin embargo, una combinación de un solo pulpo se vería así:
commit ae632e99ba0ccd0e9e06d09e8647659220d043b9
Merge: f51262e... c9ce629... aa0f25d...
Nuestro
La nuestra == Quiero incorporar otra cabeza, pero desechar todos los cambios que introduce esa cabeza.
Esto mantiene el historial de una sucursal sin ninguno de los efectos de la sucursal.
(Lea: Ni siquiera se miran los cambios entre esas ramas. Las ramas simplemente se fusionan y no se hace nada con los archivos. Si desea fusionar en la otra rama y cada vez surge la pregunta "nuestra versión de archivo o su versión" que puedes usar git merge -X ours
)
Subárbol
El subárbol es útil cuando desea fusionar otro proyecto en un subdirectorio de su proyecto actual. Útil cuando tienes una biblioteca que no deseas incluir como submódulo.
En realidad, las únicas dos estrategias que querrá elegir son las nuestras si desea abandonar los cambios realizados por la rama, pero mantener la rama en el historial y el subárbol si está fusionando un proyecto independiente en el subdirectorio del superproyecto (como 'git-gui' en ' repositorio git').
Octopus merge se usa automáticamente cuando se fusionan más de dos ramas. La resolución está aquí principalmente por razones históricas y para cuando se ve afectado por casos extremos de estrategias de fusión recursivas .