Opción de fusión git -no -ff

Opción de fusión git -no -ff

Comprender la opción de fusión de git no-ff

La capacidad de fusión fácil de git es una de sus fortalezas. Durante una fusión, GIT usa fusiones rápidas cuando se da cuenta de que el jefe de la rama actual es un antepasado del compromiso que está tratando de fusionar. En una fusión rápida, no hay un nuevo compromiso. Git solo mueve el puntero. Si este comportamiento no es deseable, puede usar el indicador No-FF para crear una nueva confirmación para la fusión.

Cómo se ve la fusión con y sin avance rápido

Después de un avance rápido, su historial de git se verá así:

C0 -> C1 -> C2-> C3

Para el mismo número de compromisos, aquí hay una historia de fusión sin avance rápido:

En el primer caso, no hay indicios de que hubiera una ramificación. En el segundo caso, la historia muestra un compromiso C4 para indicar dónde ocurrió la fusión.

Caminando por un ejemplo

Creará un repositorio de git, creará una rama y luego probará las fusiones con y sin avance rápido.

Sección 1: Configuración

Primero, puede crear el repositorio Git con los siguientes pasos:

$ mkdir my_project
$ cd my_project
$ git init
$ touch a.TXT
$ git add -a
$ git commit -m "c0: agregar un.TXT"

Ahora creemos una rama llamada características y cometamos algunos cambios:

Características de la rama de $ git
Funciones de pago de $ git
$ touch b.TXT
$ git add -a
$ git commit -m "c1: agregar b.TXT"
$ touch c.TXT
$ git add -a
$ git commit -m "c2: agregando c.TXT"
$ touch d.TXT
$ git add -a
$ git commit -m "c3: agregando D.TXT"

Sección 2: Fusionar con avance rápido

Volvamos a la rama maestra y fusionemos la rama de las características:

$ git checkout maestro
$ git fusion Features

Producción:

Actualización 08076FB ... 9EE88EB
Avance rápido
b.txt | 0
C.txt | 0
d.txt | 0
3 archivos cambiados, 0 inserciones (+), 0 deleciones (-)
Crear modo 100644 b.TXT
Crear modo 100644 C.TXT
Crear modo 100644 D.TXT

Si verifica el historial, verá:

$ git log -enneline
9e88eb C3: Agregar D.TXT
C72B92C C2: Agregar C.TXT
2E4039E C1: Agregar B.TXT
08076FB C0: Agregar un.TXT

Entonces, todos los compromisos de la rama de características están en la rama maestra ahora. Si continúa haciendo cambios en Master, no hay forma de saber cuándo se fusionó la rama de las características.

Sección 3: sin avance rápido

Repita la Sección 1 para una nueva carpeta.

Luego, pruebe una fusión sin avance rápido:

$ git checkout maestro
$ git fusion-no-ff función

Se abrirá lo siguiente en el editor de texto predeterminado de su GIT:

Fusionar 'características de la rama'
# Ingrese un mensaje de confirmación para explicar por qué esta fusión es necesaria,
# Especialmente si fusiona un río arriba actualizado en una rama de temas.
#
# Las líneas que comienzan con '#' serán ignoradas y un mensaje vacío aborta
# el compromiso.

Modificar los comentarios. En este caso, solo puede agregar "C4:" antes de las características de "fusionar rama" ". La salida debería verse así:

Fusionar hecha por la estrategia 'recursiva'.
b.txt | 0
C.txt | 0
d.txt | 0
3 archivos cambiados, 0 inserciones (+), 0 deleciones (-)
Crear modo 100644 b.TXT
Crear modo 100644 C.TXT
Crear modo 100644 D.TXT

Ahora, si verifica el historial, debería verse como lo siguiente:

$ git log -enneline
E071527 C4: Características de la rama de fusión '
BB79C25 C3: Agregar D.TXT
692BD8C C2: Agregar C.TXT
A0DF62A C1: Agregar B.TXT
7575971 C0: Agregar un.TXT

Puede ver que aunque tiene exactamente los mismos cambios, esta versión de Merge tiene la confirmación adicional de C4 que significa la fusión de características ramificadas en maestro.

Conclusión

La bandera Git Merge No-FF ayuda a crear una historia más legible. Le permite colocar etiquetas que muestran claramente dónde ocurrieron las fusiones. Puede ahorrarle tiempo y esfuerzo durante la depuración.

Estudio adicional:

  • https: // git-scm.com/docs/git-ferge
Referencias:
  • Overflow de pila: lo que es la diferencia entre-git-merge-y-git-merge-no-ff
  • https: // www.atlassiano.com/git/tutorials/usando ramas/git-ferge