¿Cómo se revierte a una etiqueta específica en Git?

85

Sé cómo volver a las confirmaciones anteriores en una rama de Git, pero ¿cómo puedo volver al estado de una rama dictado por una etiqueta? Imagino algo como esto:

git revert -bytag "Version 1.0 Revision 1.5"

es posible?

zachd1_618
fuente
¿Desea "rebobinar la rama" (es decir, eliminar las confirmaciones), o agregar una nueva confirmación a la rama actual, que configura la rama para que todos los archivos estén "como estaban en la confirmación dada por esa etiqueta"?
torek
Cualquiera de los dos debería hacer el trabajo, aunque creo que prefiero agregar una nueva confirmación a la rama actual de la manera que describe
zachd1_618
En ese caso, use el git checkout <id> .método de esta respuesta .
torek

Respuestas:

130

Las etiquetas Git son solo indicadores de la confirmación. Por lo tanto, los usa de la misma manera que HEAD, nombres de sucursales o confirma los hashes sha. Puede usar etiquetas con cualquier comando git que acepte argumentos de confirmación / revisión. Puede probarlo con git rev-parse tagnamepara mostrar el compromiso al que apunta.

En tu caso tienes al menos estas dos alternativas:

  1. Restablece la rama actual a una etiqueta específica:

    git reset --hard tagname
    
  2. Genere el compromiso de reversión en la parte superior para llegar al estado de la etiqueta:

    git revert tag
    

Sin embargo, esto podría introducir algunos conflictos si tiene confirmaciones de fusión.

jurglic
fuente
28
Creo que "git revert <tag>" revierte los cambios en la confirmación etiquetada, en lugar de restaurar su copia de trabajo a esa versión.
Matt
También a deshacerse de los archivos sin seguimiento / versionado, siga stackoverflow.com/a/912737/923560
Abdull
3
Como dijo @Matt, la respuesta aceptada es simplemente incorrecta, ya que solo revierte los cambios en la confirmación etiquetada. Su mejor opción es usar hash de confirmación y siga esta respuesta: stackoverflow.com/a/4114122/6348485
Swagga Ting
Hola, ¿podría explicar "generar confirmación de reversión en la parte superior para llegar al estado de la etiqueta:"? Desafortunadamente, no tengo idea de lo que esto significa.
John Little
12

Usa git reset :

git reset --hard "Version 1.0 Revision 1.5"

(asumiendo que la cadena especificada es la etiqueta).

devnull
fuente
1

Puedes usar git checkout.

Probé la solución aceptada pero obtuve un error. warning: refname '<tagname>' is ambiguous'

Pero como dice la respuesta, las etiquetas se comportan como un puntero a una confirmación, por lo que, como lo haría con un hash de confirmación, puede simplemente verificar la etiqueta. La única diferencia es que lo introduces con tags/:

git checkout tags/<tagname>

joshi123
fuente