Revertir varios commits malos, pero preservando un buen commit en medio

Mi tree se ve así:

A --> B --> C --> D --> E 

A es un buen compromiso, B, D, E son fusiones incorrectas, C es un buen compromiso.

Entonces necesito mantener A y C, y deshacerme de los demás. ¿Hay una buena manera de hacer eso? Gracias de antemano a todos los Git-ninjas.

en git, revertir un commit solo deshace ese commit, no la serie completa que lo lleva, así que solo necesitas:

 git revert E git revert D git revert B 

Ahora me doy count de que especificó que esas confirmaciones eran fusiones, por lo que tendrá que especificar el padre que desea conservar, así que use el -m parentNumber :

 # revert the E commit, keeping the state of the first parent git revert -m 1 E # (and similar for the others...) 

es decir. mira el siguiente gráfico de compromiso:

 -------R--S--M -P--Q-------/ 

Aquí tenemos dos 'twigs' que se fusionaron en M Si le dices a git que revierte M , no sabe si quieres mantener el código en el estado de commit S o en el estado de commit Q , entonces necesitas decirle a git qué padre de la combinación quieres.

 git commit -m 1 M # will leave you in commit S git commit -m 2 M # will leave you in commit Q 

Puedes usar git cherry-pick para eso.

Si los commits son "push" (públicos), debes revertir haciendo:

1) tantas revierten como malas son las confirmaciones:

 git revert E git revert D git revert B 

2) Puedes cometer un solo reverso haciendo esto:

  git checkout B -b temp git rebase -i A 

Edite el file para mantener solo las confirmaciones que desea revertir y networkinguzca las restantes a una única confirmación.

  git revert <that single commit> git checkout E git cherry-pick <revert from that single commit> 

luego necesita editar el post de confirmación para que tenga sentido en su twig E original.

Sin embargo, si las confirmaciones son locales y nunca se publicaron, debe eliminarlas para get un tree más limpio.

  git checkout B -b temp git rebase -i A 

Edite el file para mantener solo las confirmaciones que desee.