Git merging – ¿Qué le sucede a la twig fusionada?

Tengo una pregunta sobre la fusión de git. Digamos que tengo dos twigs en mi repository (tanto locales como remotas): maestro y testing. Y mientras trabajaba en la twig de testing, la twig principal fue actualizada por otra persona. En la terminal, escribo:

git checkout master git pull origin master 

Y esto actualiza mi twig principal con las cosas recientemente agregadas ¿verdad? Luego, termino lo que estaba haciendo en mi twig de testing.
Si voy a la terminal y escribo:

 git checkout master git merge test git push origin master 

Esto combina mi twig de testing en mi twig principal y luego empuja los cambios a Github a la derecha (supongamos que no hay conflictos). Mi pregunta es: ¿qué pasa con la twig de testing? ¿Permanece igual que antes de la fusión? ¿O acaso la testing y la twig principal se vuelven iguales? ¿Debo hacer esto ahora para actualizar la twig de testing?

 git checkout test git pull origin master git push origin test 

Gracias por adelantado.

Si voy a la terminal y escribo:

 git checkout master git merge test git push origin master 

Esto combina mi twig de testing en mi twig principal y luego empuja los cambios a Github a la derecha (supongamos que no hay conflictos). Mi pregunta es: ¿qué pasa con la twig de testing?

Nada en absoluto.

Recuerde que los nombres de las sucursales son simplemente nombres para una confirmación (única). Para dibujarlos, me gusta dibujar los commits como nodos networkingondos, o letras mayúsculas cuando necesitamos hablar de commits específicos, con líneas que los conectan:

 ...--o--o--o--o <-- master \ o--o--o <-- test 

Cada commit "apunta hacia atrás" a su commit principal, por lo que si asignamos a cada uno de estos commits un nombre de letra y dibujamos todas las flechas intermedias, obtenemos:

 ...<-A<-B<-C<-D <-- master \ E<-F<-G <-- test 

Los nombres de twig, master y test , en realidad contienen las ID de hash sin formatting de las puntas de las dos twigs. Es decir, si examina el file .git/refs/heads/master 1 encontrará uno de esos grandes y desagradables hash de 40 caracteres, a139fc7... o lo que sea, dentro de él.

En efecto, los puntos master para comprometer D y test puntos de test para G Confirmar D señala de nuevo para confirmar C , que apunta a B , y así sucesivamente; y devuelve los puntos G a F , que apunta a E , que apunta a B (es demasiado complicado dibujar una flecha con text plano aquí, ya que algunas buenas fonts de dibujo con flechas solo funcionan en algunas máquinas).

Cuando estás en una twig y haces una nueva confirmación, la forma en que Git realiza esta confirmación es que escribe la nueva confirmación con su set padre en la sugerencia de bifurcación actual, y luego una vez que la nueva confirmación está en el repository de forma segura, reescribe el file de nombre de sucursal con la ID del nuevo compromiso. Esto hace que el nombre de la twig apunte a la nueva sugerencia. La nueva ID no va a ninguna otra parte, por lo que ningún otro nombre de twig cambia de ninguna manera.

Una combinación de fusión tiene dos padres, por lo que cuando se git merge test y funciona, se obtiene esto:

 ...--o--o--o--o---o <-- master \ / o--o--o <-- test 

Tenga en count que la test no se ha movido en absoluto, pero el master tiene -y la nueva fusión confirma los puntos a dos confirmaciones anteriores diferentes: la antigua ramificación del master y la (sin cambio) punta de la test .


1 No hay ninguna promise de que este file exista en el futuro, o permanezca en esta location o tenga este formatting, pero en este momento, con las versiones actuales de Git hasta la versión 2.10, generalmente tendrá ese file.