Git: ¿cómo revertir una fusión de twig sin sobreescribir el historial?

Tengo dos twigs: master y opengl . Recientemente terminé la implementación (o al less eso pensé) de la twig opengl y decidí fusionarla en master :

 git checkout master git merge opengl git push 

Después de hacerlo, varios desarrolladores que trabajan en la twig master obtuvieron mis cambios y resultó que mi implementación estaba en conflicto con parte de su código. Por lo tanto, me gustaría revertir la operación de fusión en la twig master , pero sin sobreescribir el historial.

Tenga en count que me gustaría poder fusionar eventualmente la twig opengl en master (después de corregir todos los errores). Por lo tanto, simplemente verificando la versión anterior del master y confirmandolo no funcionará. La confirmación recién creada cancelará mis cambios de opengl cuando intente fusionarlo.

Gracias.

La documentation " Cómo revertir una fusión defectuosa " mencionada por cebewee explica por qué un git revertir es complicado al revertir una combinación.

Por lo tanto, la fusión seguirá existiendo , y todavía se verá como unir las dos twigs, y las fusiones futuras verán que se fusionan como el último estado compartido, y la reversión que revirtió la fusión introducida no afectará en absoluto.
Si piensas en "revertir" como "deshacer", entonces siempre vas a perder esta parte de revertir.
Sí, deshace los datos, pero no, no deshace el historial.

git revert es la solución correcta aquí, pero tendrá una consecuencia en el futuro, cuando quieras fusionar esa twig nuevamente.
La siguiente fusión tendrá que "revertir la reversión" primero, y luego fusionar la twig.

Editar: Esto no es lo que el OP solicitó, pero lo mantendré aquí en caso de que alguien busque una solución que implique reescribir el historial.


Primero, cree una nueva twig si desea mantener la fusión de forma local, de modo que la confirmación no "desaparezca" después de mover el master :

 git branch erroneousMerge master 

Si los otros desarrolladores también han realizado commits después de la fusión errónea, ¡deben hacer esto también!

A continuación, restablezca el master para hacer reference a la última confirmación antes de la fusión; digamos que es commit e498b2... :

 git checkout e498b2 git branch -f master 

Ahora, puede presionar el master corregido ( -f indica que desea hacer que el server restablezca su twig master al compromiso que usted hizo resaltar, aunque este compromiso sea un antecesor del que señala en el repository )

 git push -f origin master 

Ahora, los otros desarrolladores pueden actualizar su master para que coincida con el del server ( -f indica que aceptan que la twig se haya movido hacia atrás):

 git fetch -f origin master:master 

Si los otros desarrolladores han realizado cambios después de la fusión errónea (digamos que la confirmación de fusión es abc123 , pueden usar rebase para mover los cambios al master corregido:

 git rebase --onto master abc123 oldMaster 

Si te equivocas en algún momento y terminas perdiendo commits porque ya no hay twigs apuntando hacia ellos, puedes usar git fsck --lost-found para recuperarlos.