¿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?


¿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.


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).


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>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.