Respuestas:
Puede usar git revert <commit>…para todas las n confirmaciones y luego presionar como de costumbre, manteniendo el historial sin cambios.
O puede "retroceder" con git reset --hard HEAD~n. Si está presionando en un repositorio público o compartido, puede divergir y romper el trabajo de otros en función de su rama original. Git te impedirá hacerlo, pero puedes usarlo git push -fpara forzar la actualización.
reverthará que sus ramas de funciones se traten como "ya" fusionadas. Eso es porque estas ramas son en realidad están fusionando. Pero los cambios se revirtieron. Solución: seleccione o revierte la confirmación de reversión .
reset --hardtambién hace que las ramas de funciones se traten como ya fusionadas? Mi suposición es que no lo haría (donde lo revertharía).
elmarco tiene razón ... su sugerencia es la mejor para repositorios compartidos / públicos (o, al menos, sucursales públicas). Si no fue compartido (o está dispuesto a interrumpir a otros), también puede presionar una referencia en particular:
git push origin old_master:master
O, si hay una confirmación SHA1 en particular (digamos 1e4f99e en forma abreviada) a la que le gustaría regresar:
git push origin 1e4f99e:master
Afortunadamente, pude usar la solución de Pat Notz que eliminó por completo la confirmación no deseada. Sin embargo, inicialmente recibí el error
error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*
Pero agregar la -fopción force ( ) sobrescribe este error
git push -f origin 52e36b294e:master
Si tiene acceso directo al repositorio remoto, siempre puede usar:
git reset --soft <sha1>
Esto funciona ya que no se intenta modificar el directorio de trabajo que no existe. Para obtener más detalles, consulte la respuesta original:
¿Cómo puedo eliminar la última confirmación en un repositorio desnudo de git?
git reset --hard [sha1]donde sha1 es el identificador hash de confirmación.