deshacer la fusión accidental de git sin retroceder el historial

Hice algo estúpido y accidentalmente fusioné una rama de tema en mi rama maestra y luego la empujé en vivo a github (donde otros han tirado). Solo para asegurarme de que era un error completamente estúpido, lo saqué a mis servidores de producción.

He colgado la cabeza avergonzado durante la cantidad de tiempo adecuada y ahora necesito descubrir cómo revertir efectivamente las confirmaciones de código mientras avanzo en el historial de confirmaciones.

Para obtener mi código de producción en la caja correcta, ejecuté git checkout hashoflettersandnumbers y ese es el compromiso que quiero que tenga la cabeza de producción.

Corro git reset hashoflettersandnumbers y luego git clean para eliminar los cambios de esa confirmación en el futuro, pero parece que no puedo hacer que ese código sea el HEAD de la rama maestra y hacer una nueva confirmación.

preguntado el 16 de mayo de 11 a las 17:05

+1 para "asegurarse de que fue un error completamente estúpido". [Mi reciente] Misery ama la compañía. -

1 Respuestas

Utilización de git revert en cada una de las ramas. Esto creará una nueva confirmación que conservará su error por toda la eternidad, pero le devolverá el mismo árbol que tenía antes de fusionarse.

Por ejemplo, si 123456 es el compromiso de fusión ...

$ git checkout master
$ git revert 123456
$ git checkout topic-branch
$ git revert 123456

Esto supone que no se trata de una combinación de "avance rápido".

contestado el 16 de mayo de 11 a las 21:05

gracias @dietrich. Para mi propia referencia cuando busque en Google esto la próxima vez, es más seguro y más intuitivo volver a una confirmación estable, una confirmación a la vez y usando la bandera --no-commit para evitar confirmaciones una a la vez mientras retirarse. Además, use -m 1 para fusionar confirmaciones. - Brycemcd

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.