Encontré una buena explicación para Cómo revertir la fusión desde este enlace y copié pegué la explicación a continuación y sería útil en caso de que el siguiente enlace no funcione.
Cómo revertir una fusión defectuosa
Alan (alan@clueserver.org) dijo:
Tengo una rama maestra. Tenemos una rama de eso en la que algunos desarrolladores están trabajando. Afirman que está listo. Lo fusionamos en la rama maestra. Rompe algo, así que revertimos la fusión. Hacen cambios al código. lo llevan a un punto en el que dicen que está bien y nos fusionamos nuevamente. Cuando se examina, encontramos que los cambios de código realizados antes de la reversión no están en la rama maestra, pero los cambios de código posteriores están en la rama maestra. y pidió ayuda para recuperarse de esta situación.
La historia inmediatamente después de la "reversión de la fusión" se vería así:
---o---o---o---M---x---x---W
/
---A---B
donde A y B están en el desarrollo lateral que no fue tan bueno, M es la fusión que trae estos cambios prematuros a la línea principal, x son cambios no relacionados con lo que la rama lateral hizo y ya hizo en la línea principal, y W es el " revertir de la fusión M "(¿W no mira M al revés?). IOW, "diff W ^ .. W" es similar a "diff -RM ^ .. M".
Tal "reversión" de una fusión se puede hacer con:
$ git revert -m 1 M
Después de que los desarrolladores de la rama lateral corrijan sus errores, el historial puede verse así:
---o---o---o---M---x---x---W---x
/
---A---B-------------------C---D
donde C y D deben arreglar lo que se rompió en A y B, y es posible que ya tenga otros cambios en la línea principal después de W.
Si combina la rama lateral actualizada (con D en su punta), ninguno de los cambios realizados en A o B será el resultado, ya que fueron revertidos por W. Eso es lo que vio Alan.
Linus explica la situación:
Revertir un compromiso regular deshace efectivamente lo que hizo ese compromiso, y es bastante sencillo. Pero revertir una confirmación de fusión también deshace los datos que cambió la confirmación, pero no hace absolutamente nada para los efectos en la historia que tuvo la fusión. Por lo tanto, la fusión seguirá existiendo, y aún se verá como unir las dos ramas, y las futuras fusiones verán esa fusión como el último estado compartido, y la reversión que revirtió la fusión introducida no afectará en absoluto. Entonces un "revertir" deshace los cambios de datos, pero es mucho noun "deshacer" en el sentido de que no deshace los efectos de una confirmación en el historial del repositorio. Entonces, si piensa en "revertir" como "deshacer", siempre se perderá esta parte de las reversiones. Sí, deshace los datos, pero no, no deshace el historial. En tal situación, primero querrá revertir la reversión anterior, lo que haría que el historial se vea así:
---o---o---o---M---x---x---W---x---Y
/
---A---B-------------------C---D
donde Y es la reversión de W. Tal "reversión de la reversión" se puede hacer con:
$ git revert W
Este historial (ignorando posibles conflictos entre lo que W y W..Y cambiaron) sería equivalente a no tener W o Y en absoluto en el historial:
---o---o---o---M---x---x-------x----
/
---A---B-------------------C---D
y fusionar la rama lateral nuevamente no tendrá conflictos derivados de una reversión anterior y una reversión de la reversión.
---o---o---o---M---x---x-------x-------*
/ /
---A---B-------------------C---D
Por supuesto, los cambios realizados en C y D todavía pueden entrar en conflicto con lo que hizo cualquiera de las x, pero eso es solo un conflicto de fusión normal.