Git: Deshacer cambios que ya fueron publicados

Así que he estado lamentando los últimos 3 compromisos que hice en mi proyecto durante esta semana. El problema es que ya los empujé al repository público y sospecho que al less un par de personas han hecho esos cambios.

¿Cuál sería ahora el curso de acción más seguro para deshacer los cambios en los últimos 3 commits, sin dar ningún agravio a las personas que hicieron esos cambios?

Al final, ¿qué fue esto simple?

 git revert HEAD~3..HEAD 

Cuando lo ejecuté, creó un nuevo compromiso para cada compromiso que estaba revertiendo, deshaciendo sus cambios. Hubiera sido mejor si hubiera revertido todo en una única confirmación. Pero eso es lo suficientemente bueno, supongo.

Si desea volver al estado a partir de una confirmación en particular, y realmente no desea una cadena de reversiones que muestre cómo llegó allí,

 newcommit=$( git cat-file -p $thatcommit \ | sed '1,/^$/d;$a \ reverting to '$(git rev-parse $thatcommit) \ | git commit-tree -p HEAD $thatcommit^{tree} ) branch=`git symbolic-ref -q --short HEAD` git checkout ${branch:+-B $branch} $newcommit 

duplicará $thatcommit en la sugerencia de sucursal, el post y todo (solo las nuevas dates / padres, más la nota "revertida" al final).

Usted puede simplemente git reset --hard para la confirmación que quiere que sea la sugerencia, y git push (tal vez necesite) git reset --hard la confirmación de no avance rápido) el resultado.

Pero eso significa que los cambios se pierden para siempre . Tal vez deberías crear una nueva twig en la punta ( git branch this-was-a-big-mistake ) antes que la anterior, y sacar ambas twigs …