2011-10-28 8 views
8

cometí un error dos veces. ¿Cómo revertir dos confirmaciones y comprometer solo cosas buenas?¿Cómo revertir dos confirmaciones y comprometer solo cosas buenas?

+0

¿Qué es lo bueno? ¿Podría describir con más detalle cómo se ve su historia ahora y cómo desea que se vea? – svick

+0

un poco más de detalle ayudaría si obtiene la respuesta correcta (¿algo bueno?) – ryanzec

+0

Borre todas las cosas malas antes de comprometer todo lo demás. –

Respuesta

11

Puede hacer un git rebase -i HEAD~2 y luego usar la interfaz para descartar los "errores" que están allí desde entonces y limpiar su historial. Sin embargo, esto altera el historial del proyecto y si ya ha presionado (y otros han retirado) sus cambios, existen algunos problemas sociales que resolver.

La otra opción es git revert esos cambios. Luego se agregarán 2 nuevos commits al historial que hace que el hecho de que no desee estos dos commits sea explícito en el historial del proyecto. Menos limpio pero más fácil de trabajar.

+0

Mis compañeros de trabajo se quejarán de que la mala comisión estuvo allí para empezar. Es mejor deshacerse de él antes de intentar fusionar la rama. Gracias por proporcionarnos la respuesta 'git rebase -i' y no solo diciendo" ¡realmente no quieres hacer eso! " como muchas personas lo hacen! –

+0

Otro comando útil en esta situación es 'git push --force', en caso de que ya hayas presionado la confirmación incorrecta. –

+0

La opción '--force' es destructiva. Si alguien más ha realizado cambios sobre sus confirmaciones y los ha enviado al repositorio, su impulso de fuerza los destruirá a todos. –

10

Primero, git reset HEAD~2 para descartar los dos primeros commits, mientras deja su árbol de trabajo exactamente como está. Luego, simplemente crea una nueva confirmación con lo que quieras (por ejemplo, con git add sy luego git commit).

Consulte Reset Demystified de Scott Chacon para obtener más información sobre la git reset comunicación a menudo confusa.

+1

Solo haría esto si el compromiso es solo local, si son públicos, utilizaría revertir en los 2 últimos commits – ryanzec

+0

Sí, suponía que OP no ha enviado los commits incorrectos a ninguna parte. –

Cuestiones relacionadas