¿Git permite fusiones infundadas?

Sé que las fusiones infundadas en Team Foundation Version Control son peligrosas. Me preguntaba si también era peligroso con Git.

Si no está familiarizado con una fusión sin fundamento, aquí hay un ejemplo . La línea punteada roja es una rebase / fusión sin base.

¿Es seguro hacer esto con Git?

Bueno, sí y no. Team Foundation Version Control (TFVC) impone una jerarquía de twig, y ​​tiene una regla de que solo se puede fusionar de una twig a su principal o secundaria. En la image que proporciones, puedes unir B a C y esa no es una fusión sin base. Fusionar B en C usará B3 como ancestro común y producirá una combinación agradable, fácil de tratar con tres vías.

Sin embargo, TFVC no le permite fusionar A directamente en C. Se espera que combine A en B, luego combine el resultado en C. Si desea rodear este flujo de trabajo, está atrapado haciendo una fusión sin base, que se salta cálculo ancestral común. El resultado es que está realizando una combinación de tres vías sin un ancestro común: ambos files parecen nuevas incorporaciones y las diferencias entre ellas se tratarán como conflictos.

Es un dolor gigante.

Git no intenta imponer ninguna jerarquía de twig, por lo que en su ilustración, puede fusionar de C a A sin penalización. A3 sería el ancestro común en este caso, y usted tendría el siguiente gráfico:

C 1--2--3----M / / B 1--2--3--4--5 / / / A 1--2--3--4--5----------- 

Entonces este escenario no es una fusión sin fundamento en Git, sin embargo, todavía puedes tener una fusión sin fundamento en Git. Si intenta fusionar dos twigs que no tienen un antecesor común (sin base de fusión), esto sería una fusión sin base y tendría todos los problemas que ocurran cuando realice una fusión sin fundamento en TFVC.

Puedes probar esto creando una nueva twig sin padres (a través de git checkout --orphan ).

Puedes usar git cherry-pick para aplicar commits arbitrarios a cualquier twig.

Lo que se muestra en rojo es una fusión perfectamente normal con git y no tendrá dificultades, excepto algunos conflictos de fusión 'normales' si cambia cosas en las 2 twigs en el mismo lugar en los mismos files. De lo contrario, no hay problemas!

Pero si no necesitas materializar la fusión, de hecho, podrías tomar una cereza.

Pero lo que es bueno con git es que puedes intentar deshacer (¡una fusión es realmente fácil de deshacer!). Entonces, sin demasiadas dificultades, podrías probar la combinación y ver qué sucede, responder a tu propia pregunta 😉 y deshacer si no estás satisfecho.

Bienvenida de tfs 😉