¿Cómo revierto la rama maestra a una etiqueta en git?

87

Tenemos ramas de origen y desarrollo. El estado inicial del maestro se etiquetó en tag_ABC.

Tenemos pocos cambios realizados en la rama de desarrollo y empujados al origen. Entonces, accidentalmente, hemos fusionado el desarrollo en maestro y empujado al origen.

Ahora nos gustaría volver al maestro al punto de control tag_ABC. ¿Cómo podemos hacer eso?

Manjunath Manoharan
fuente

Respuestas:

160

Tu puedes hacer

git checkout master
git reset --hard tag_ABC
git push --force origin master

Tenga en cuenta que esto sobrescribirá el historial existente en el repositorio anterior y puede causar problemas a otros desarrolladores que hayan revisado este repositorio.

Paweł Obrok
fuente
5
De esta forma todas las ramas serán empujadas con fuerza. Quizás quieras probargit push --force origin master
danza
1
Como referencia, para volver a la confirmación anterior, puede hacer unagit reset --hard HEAD^
Geoff
1
Por cierto, git reset --hard HEAD^se puede usar varias veces para retroceder una confirmación a la vez y, si está en control remoto, git push --force origin masterse puede usar.
Luke Wenke
También para restablecer la rama maestra de las copias locales de otras personas al uso de la versión anterior git pullygit reset --hard origin/master
Luke Wenke
Un pequeño consejo después de esta reversión, podría decirse al equipo: ¡¡Extraiga de la rama maestra !! ¡¡Gracias!!
JRichardsz
89

Esta no es una respuesta directa a la pregunta, pero esta página regresa cuando se buscan formas de revertir el código de una rama a una publicación de etiqueta.

Otra forma es crear una diferencia entre el estado actual de la rama y la etiqueta a la que desea volver y luego aplicarla a la rama. Esto mantiene el historial de versiones correcto y muestra los cambios que entran y luego vuelven a aparecer.

Suponiendo que su rama se llama maestra y la etiqueta a la que desea volver se llama 1.1.1

git checkout 1.1.1
git diff master > ~/diff.patch
git checkout master
cat ~/diff.patch | git apply
git commit -am 'Rolled back to version 1.1.1'
git push origin master
Juan
fuente
19
Esta debería ser la respuesta aceptada, ya que mantiene intacto el historial y no causa problemas a otras personas que han revisado el repositorio.
OpenUserX03
1
Esto parece elegante. Pero intenté revertir la rama qa a una etiqueta anterior y solo recibí mensajes de error de parche. $ gato ../diff_qa.patch | git apply <stdin>: 55: espacio en blanco final. <stdin>: 336: espacio en blanco final. <stdin>: 12692: espacio en blanco final. <stdin>: 12695: espacio en blanco final. <li> {{$ tag ['rank'] + 1}}: <stdin>: 12706: espacio en blanco final. error: error de parche: .env.wholo: 1
rickatech
Probé varias soluciones, pero ninguna funcionó. Este funcionó a las mil maravillas. Muchas gracias @John
Strabek
Esta es la forma correcta de hacerlo. No es destructivo y conserva la historia completa
Nitin Bansal
Esto no funciona para mi. Puedo ejecutar los primeros 3 comandos sin ningún problema, pero cuando lo hago cat ~/diff.patch | git apply, me lo dice error: unrecognized input. ¿Alguna idea? @NitinBansal tal vez desde que comentaste recientemente?
Experience111