usar tag practices examples delete como best agregar git deployment git-tag

practices - git tag examples



Verificación de la etiqueta de Git conduce al "estado HEAD aislado" (2)

Estoy desarrollando un script de implementación para mi proyecto de git y recién comencé a usar etiquetas. He agregado una nueva etiqueta llamada v2.0 :

git tag -a v2.0 -m "Launching version 2.0"

Y he llevado esta etiqueta al repositorio remoto

git push --tags

Cuando intento ejecutar la secuencia de comandos de implementación y verificar la etiqueta v2.0 recibo este mensaje:

Estás en el estado ''HEAD separado''. Puede mirar alrededor, realizar cambios experimentales y confirmarlos, y puede descartar cualquier compromiso que realice en este estado sin afectar a ninguna de las ramas realizando otro pago. Si desea crear una nueva bifurcación para retener las confirmaciones que crea, puede hacerlo (ahora o más adelante) utilizando -b con el comando de finalización nuevamente. Ejemplo: git checkout -b new_branch_name HEAD está ahora en

¿Eso es normal? El repositorio está en el limbo porque si lo hago:

git branch

Obtengo esta salida:

* (no branch) master

Lo siento si esto es obvio, pero no pude resolverlo.


De acuerdo, primero algunos términos ligeramente simplificados.

En git , una tag (como muchas otras cosas) es lo que se conoce como treeish . Es una forma de referirse a un punto en la historia del proyecto. Treeishes puede ser una etiqueta, una confirmación, un especificador de fecha, un especificador ordinal u otras muchas cosas.

Ahora una branch es como una etiqueta, pero es movible. Cuando estás "en" una rama y haces una confirmación, la rama se mueve al nuevo compromiso que hiciste indicando su posición actual.

Su HEAD es un puntero a una rama que se considera "actual". Por lo general, al clonar un repositorio, HEAD apuntará a master que a su vez apuntará a un compromiso. Cuando luego haces algo como git checkout experimental , cambias el HEAD para apuntar a la rama experimental que podría apuntar a un commit diferente.

Ahora la explicación.

Cuando haces un git checkout v2.0 , estás cambiando a un commit que no está señalado por una branch . El HEAD ahora está "separado" y no apunta a una rama. Si decide hacer un commit ahora (como puede ser), no hay un puntero de rama para actualizar para rastrear este commit. El cambio a otra confirmación te hará perder este nuevo compromiso que has realizado. Eso es lo que el mensaje te está diciendo.

Generalmente, lo que puedes hacer es decir git checkout -b v2.0-fixes v2.0 . Esto creará un nuevo puntero de bifurcación en la confirmación apuntada por treeish v2.0 (una etiqueta en este caso) y luego cambia tu HEAD para que apunte a eso. Ahora, si realiza commits, será posible rastrearlos (usando la rama v2.0-fixes ) y podrá trabajar como lo haría normalmente. No hay nada "incorrecto" en lo que has hecho especialmente si solo quieres echarle un vistazo al código v2.0 . Sin embargo, si desea realizar alguna modificación de la que desea realizar un seguimiento, necesitará una sucursal.

Deberías pasar algún tiempo comprendiendo todo el modelo DAG de git. Es sorprendentemente simple y hace todos los comandos bastante claros.


Sí, es normal. Esto se debe a que pagas una única comisión, eso no tiene una ventaja. Especialmente es (tarde o temprano) no es cabeza de ninguna rama.

Pero generalmente no hay problema con ese estado. Puedes crear una nueva rama desde la etiqueta, si esto te hace sentir más seguro :)