Fusión GIT –no-ff

En este post, alguien experto en git tratará de explicar cómo se fusionan los git –no-ff nos puede ayudar. He leído aquí http://nvie.com/posts/a-successful-git-branching-model/ (que personalmente encontré que es una muy buena publicación) que git merge –no-ff: "Esto evita perder información sobre la existencia histórica de una twig de características y agrupa todos los commits que juntos agregaron la característica ". Así que lo encontré realmente útil y hacer algunos experimentos.

El problema es cómo podemos saber a partir de la información de logging de git que las confirmaciones pertenecen a cada característica. Por eso hice el siguiente experimento. Supongamos que dos usuarios están desarrollando en un proyecto de software dos características diferentes e independientes (para evitar conflictos de fusión). A partir de la última versión estable procederemos así:

git init touch AAA.txt git add AAA.txt git commit -m "My stable software version" //this will simulate our project repository

Entonces, desde este punto, los dos usuarios (nombre Alice y Bob) crean dos twigs diferentes y comienzan a trabajar en las características:

git branch feature1_Alice git branch feature2_Bob Y ahora Alice y Bob comienzan a trabajar y comprometerse simultáneamente. Podríamos simular su como:

git checkout feature1_Alice touch f1_A1.txt git add f1_A2.txt git commit -m "Solving little bug on feature 1" Bob hace dos commits siguiendo la línea de time después de que Alice hace este:

git checkout feature2_Bob touch f2_B1.txt git add f2_B1.txt git commit -m "Starting feature 2" touch f2_B2.txt git add f2_B2.txt git commit -m "feature 2: implementing new functionality" Then Alice finish feature:

git checkout feature1_Alice touch f2_A3.txt git add f2_A3.txt git commit -m "Feature 1 finished"

Luego Bob termina feature2:

git checkout feature2_Bob touch f1_A3.txt git add f1_A3.txt git commit -m "Feature 2 finished"

Ahora fusionamos la nueva característica con la twig principal:

git checkout master git log Salida:

cometer c58dd35054f83c089292d090781438f37feeffa3

Autor: Juan

Fecha: mar 25 abr 10:30:01 2017 +0200

 My stable software version 

git merge --no-ff feature1_Alice //We put a message on the created commit

Ahora git log outputs:

commit 50c5d1570fe0c047f72200bd57ef6cef6fa9077e Merge: c58dd35 c136a23 Autor: juan Fecha: mar 25 abr 10:48:12 2017 +0200

 Merging feature 1 to main Merge branch 'feature1_Alice' 

commit c136a23c49c546e5f48d9d0634e9bc51d67370cd Autor: juan Fecha: mar 25 abr 10:41:49 2017 +0200

 Feature 1 finished 

commit c9dbb1b49444555fca528f562d3a38143fd521e9 Autor: juan Fecha: mar 25 abr 10:35:24 2017 +0200

 Solving little buf on feature 1 

commit 58afad2b46565e614a99d94d1e1aa1c8520f9f2b Autor: juan Fecha: Mar 25 abr 10:35:01 2017 +0200

 Starting feature 1 

commit c58dd35054f83c089292d090781438f37feeffa3 Autor: juan Fecha: mar 25 abr 10:30:01 2017 +0200

 My stable software version 

Y finalmente combinar la function 2:

git merge --no-ff feature2_Bob git log commit 3f27f78fefb30080ace629e561a242a4f8dbca56 Merge: 50c5d15 2eee0c1 Autor: juan Fecha: mar 25 abr 10:54:20 2017 +0200

 Merging feature 2 to master Merge branch 'feature2_Bob' 

commit 50c5d1570fe0c047f72200bd57ef6cef6fa9077e Merge: c58dd35 c136a23 Autor: juan Fecha: mar 25 abr 10:48:12 2017 +0200

 Merging feature 1 to main Merge branch 'feature1_Alice' 

commit 2eee0c1bb732443ae7d6f4893d651abfd558d55a Autor: juan Fecha: mar 25 abr 10:43:14 2017 +0200

 Feature 2 finished 

commit c136a23c49c546e5f48d9d0634e9bc51d67370cd Autor: juan Fecha: mar 25 abr 10:41:49 2017 +0200

 Feature 1 finished 

commit cd3bee2906e02df22866ba710891d21eaebb8013 Autor: juan Fecha: mar 25 abr 10:40:12 2017 +0200

 feature 2: implementing new functionality 

commit c6fdf092b2645f7d4088f9f439e820a9a820b891 Autor: juan Fecha: Mar 25 abr 10:37:39 2017 +0200

 Starting feature 2 

commit c9dbb1b49444555fca528f562d3a38143fd521e9 Autor: juan Fecha: mar 25 abr 10:35:24 2017 +0200

 Solving little buf on feature 1 

commit 58afad2b46565e614a99d94d1e1aa1c8520f9f2b Autor: juan Fecha: Mar 25 abr 10:35:01 2017 +0200

 Starting feature 1 

commit c58dd35054f83c089292d090781438f37feeffa3 Autor: juan Fecha: mar 25 abr 10:30:01 2017 +0200

 My stable software version 

¿Alguien podría decir cómo puedo ver a partir del historial de compromisos y el compromiso de fusión que compromete cada característica? No puedo ver la ventaja comentada en esa web cuando insertamos compromisos alternativos de diferentes características (o de una característica y máster) en el time.

La única diferencia en el uso de –no-ff es que la combinación de fusiones tiene información de las confirmaciones que se han fusionado, pero no sirve para rastrear el historial de confirmaciones.

Gracias por adelantado.

Puede echar un vistazo a su gráfico de repository con git log --graph --oneline --decorate --all o simplemente llame a gitk para visualizar su historial. La versión de text lineal proporcionada por un simple git log no mostrará la información que está buscando.

Al observar la representación gráfica, las asignaciones de fusión garantizan que pueda ver dónde se encuentran dos twigs, mientras que una combinación de avance rápido daría como resultado que las diferentes twigs se muestren como lineales aunque se desarrollaron en paralelo.