tag - tipos de etiquetas en git
¿Qué sucede con las etiquetas Git que apuntan a una confirmación eliminada? (3)
Di que hago lo siguiente:
- Crear rama
X
- Crear etiqueta
t
(para bifurcarX
) - empujar
- Quitar rama
X
¿Qué pasa con la etiqueta t
? ¿Está simplemente flotando allí? es considerado como basura?
¿Debo eliminar todas las etiquetas que apuntan a la rama antes de quitar la rama en sí?
Referencia
Desde Git Basics - Etiquetado :
Git utiliza dos tipos principales de etiquetas: ligeras y anotadas. Una etiqueta liviana es muy parecida a una rama que no cambia, es solo un puntero a una confirmación específica.
¿Qué pasa con la etiqueta t?
Digamos que creaste la rama x
de un commit E
y luego etiquetaste ese commit con la etiqueta t
. P.ej
x (branch)
|
V
A-----B------C------D------E
^
|
t (tag)
Si eliminas la rama x
no pasa nada al etiquetar t
.
git branch -D x
La etiqueta todavía apunta a cometer E
A-----B------C------D------E
^
|
t (tag)
es considerado como basura?
No, porque la etiqueta t
sigue haciendo referencia a la confirmación.
¿Qué pasa si se elimina el commit?
No eliminas las confirmaciones. Se eliminan los punteros a las confirmaciones y, si ya no se hace referencia a las confirmaciones, git los recolectará algún día (según su configuración).
Ver git gc
Incluso si eliminó todas las referencias comunes, como ramas y etiquetas, las confirmaciones seguirán estando referenciadas en el reflog durante algún tiempo y podrá acceder a ellas, por ejemplo, crear una rama nuevamente, etiquetarlas o seleccionarlas y así sucesivamente.
Puedes ver el reflog usando git reflog
. También eche un vistazo a gc.reflogExpireUnreachable
y gc.reflogExpire
No estoy abordando el escenario específico en la pregunta del OP, sino más bien la pregunta en el título: ¿Qué sucede con una etiqueta git que apunta a una confirmación eliminada?
Si de alguna manera logró eliminar una confirmación a la que hizo referencia una etiqueta (no está seguro de cómo podría hacerlo, vea la respuesta de René Link ), la etiqueta solo sería un puntero a una confirmación no válida (puede probar esto editando manualmente un etiqueta de .git / refs / tags).
En tal caso, la salida de la git tag
sería algo como esto:
$ git tag
error: refs/tags/v1.0 does not point to a valid object!
v1.1
...etc
La comprobación también produciría error:
$ git checkout v1.0
fatal: reference is not a tree: v1.0
Entonces, la respuesta a una pregunta "¿Qué sucede con una etiqueta git que hace referencia a una confirmación eliminada?" no es nada. Permanecerá allí, apuntando a una referencia no válida, hasta que la elimines con la git tag -d <tag>
.
Si elimina una rama de la que se creó una etiqueta, esto no tendrá ningún efecto en la etiqueta. Una etiqueta no contiene una referencia de donde se creó.
Si desea saber más acerca de las etiquetas frente a las sucursales, le recomendaría que consulte esta pregunta: ¿En qué se diferencia una etiqueta de una rama? ¿Qué debo usar, aquí?