¿Es seguro eliminar una twig fusionada en git?

Digamos que desarrollamos una function en la twig, pensamos que está completa, la combinamos para dominar y eliminar la twig. El error posterior se descubre en esta característica específica y alguien va y restablece HEAD en el repository global (que no debería hacer). Ahora, podríamos haber corregido ese error pero ya no tenemos la twig y se pierde toda la característica. ¿Hay alguna manera de restaurar esos cambios y, en general, es una buena idea conservar las twigs de características después de la fusión por un time?

Supongamos antes de la fusión que el historial de commit fue así. antes de la fusión

Después de fusionar la feature con la master , se convirtió en esto. después de la fusión

Y ahora la feature sucursal ha sido eliminada y ha sido así. eliminar la rama de características

Como podemos ver, el historial de confirmación de la feature todavía está allí, aunque la feature ref se ha ido. Una reference de twig es simplemente una variable que almacena los hash sha1 de las confirmaciones a las que hace reference desde entonces hasta ahora.

M es la confirmación de fusión (solo si se trató de una combinación verdadera, una fusión de avance rápido) que se creó al fusionar la feature con el master . Tiene dos padres, D el primer progenitor, al que el master estaba apuntando, y F el segundo progenitor, a qué feature apuntaba. Si combinamos el master con la feature y creamos M , entonces F es el primer padre y D el segundo.

El primer padre puede ser referido por M^ y el segundo padre por M^2 .

Ahora, si desea recrear la feature ref twig, suponiendo que el valor de M es af2343242 , podría ejecutar la function git branch feature af2343242^2 . Y va a ser así de nuevo. después de la fusión

¿es buena idea en general preservar las twigs de características después de la fusión por un time?

Depende. Algunos creen que es bueno mantener todos los cambios que alguna vez hubo, incluidos todos los commits y todas las twigs, tags, etc. Después de todo, estos son el valioso legado de un proyecto.

Ejemplo

Usa twigs de liberación . Digamos, cuando alcanza un hito importante en el desarrollo de sus proyectos (completó y fusionó una nueva característica) en una producción, etc.

Crea una label

 git tag -a v1.0.0 -m "v1.0.0" 

Ahora, digamos que ha seguido trabajando y ha comenzado una nueva function y después de un time se ha dado count de que se ha introducido un error con la function que se ha fusionado anteriormente. ¿Cómo puedo volver a encontrarlo después de haberlo fusionado y eliminado?

Volvamos a la label que hemos creado al fusionar la nueva característica

 git checkout v1.0.0 

No podemos comprometernos directamente con la label , pero podemos crear una nueva twig ( twig de publicación ).

 git checkout -b rb1.0.0 

Ahora podemos aplicar hotfix, luego agregar y confirmar nuestros cambios a la twig

 git add <file> <file> git commit -m "<hot fix message>" 

En este punto, todo lo que queda es fusionar el hotfix . Entonces, volvemos a la twig master y fusionamos la twig de lanzamiento

 git checkout master git merge rb1.0.0 -m "Merged <hot fix message>" 

Solo para mantenerlo orderado también eliminaremos la twig de lanzamiento en este punto.

 git branch -d rb1.0.0 

Puede recuperar todas sus confirmaciones usando el reflog. Vea el enlace a continuación.

http://gitready.com/advanced/2009/01/17/restring-lost-commits.html

Sí, generalmente es una buena idea conservar las twigs de características por un time, al less hasta que esté 100% seguro de que nunca volverá.

No duele nada ni ocupa ningún recurso. Una twig es solo una pequeña nota adhesiva que apunta a un compromiso. El único efecto que tiene dentro de git es que evita que el recolector de basura elimine de forma irrecuperable la confirmación a la que apunta (y sus antepasados).

Para su escenario actual, simplemente crearía una twig (o label) apuntando a la versión con errores del master , luego restablecería el maestro detrás del punto de fusión. Entonces ya está todo listo: git no eliminará automáticamente su twig "perdida", y podrá volver a ella cuando esté listo.

Por supuesto, si desea crear una twig "real" a partir de ella, debe encontrar la confirmación en el lado de la twig justo antes de la fusión, y hacer la git branch mybranch <hash> , que probablemente sería óptima.