Tenemos una rama principal en la que hemos combinado aproximadamente 10 ramas de características, una a la vez.¿Es posible reescribir el historial de una sucursal sin perder información de fusión en el camino?
Así que la historia reciente se parece a esto:
merged feat/10 (HEAD of master)
merged feat/9
merged feat/8
merged feat/7
merged feat/6
merged feat/5
...
Ahora nos encontramos con que feat/7
era malo y queremos sacarlo del maestro. Revertir ese compromiso de fusión no es suficiente porque no queremos que ese compromiso roto exista en absoluto en nuestra historia. Realmente no podemos usar la base de datos interactiva porque eso aplanará el historial para que parezca que todo se hizo en una sola rama, y queremos preservar todo ese buen historial de fusiones.
¿Hay alguna forma de borrar un merge commit de la historia de una sucursal?
Notaré que la historia real es mucho más compleja que la que ve en el ejemplo anterior, por lo que volver a realizar manualmente todas las fusiones ya que feat/7 no sería una buena opción.
Editar
para aclarar a los que votan para cerrar esto como un DUP: este no es el FAQ sobre la forma de llevar a cabo una confirmación usando rebase, que por supuesto ha sido contestada muchas veces. La pregunta aquí es acerca de sacar un commit sin aplanando el historial de fusión.
posible duplicado de [¿Cómo se elimina una revisión específica en el historial de git?] (Http://stackoverflow.com/questions/37219/how-do-you-remove-a-specific-revision-in-the -git-history) –
@BillyMoon la pregunta que publicas como posible duplicado no está realmente relacionada ya que mencioné específicamente por qué una simple rebase aquí no es la solución. Por favor invierta su voto cercano si es posible. Las personas que tal vez no entienden realmente los matices podrían pensar que se trata de un dúo. –
¿Estás seguro de que es necesario aplanar tu historial para volver a establecer la base? ¿No puedes simplemente rebase feat/8 en feat/7, y especificar que no quieres mantener el código de feat/7? –