¿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:
¿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:
Restablece la rama actual a una etiqueta específica:
git reset --hard tagname
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.
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.
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 <id> .
método de esta respuesta .Respuestas:
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 tagname
para mostrar el compromiso al que apunta.En tu caso tienes al menos estas dos alternativas:
Restablece la rama actual a una etiqueta específica:
Genere el compromiso de reversión en la parte superior para llegar al estado de la etiqueta:
Sin embargo, esto podría introducir algunos conflictos si tiene confirmaciones de fusión.
fuente
Usa git reset :
(asumiendo que la cadena especificada es la etiqueta).
fuente
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>
fuente