¿Cómo puedo restaurar un repository de Git y su control remoto Github a una confirmación previa sin usar restablecer?

Tengo un repo de Git y un control remoto en Github. (No edite el hecho de que está en Github. Es relevante y hace una diferencia en la respuesta. Gracias.)

Quiero restablecer la twig maestra a un estado de 25 commits back.

No quiero usar git --reset hard ... y git push -f porque prefiero no borrar el historial.

¿Hay alguna manera en que pueda decirle a Git, efectivamente …

"Haga que todo en mi copy de trabajo sea exactamente igual a este compromiso anterior, incluyendo la eliminación de files que entonces no existían".

… y luego comprometer ese estado, y luego empujar eso al control remoto?


git revert pero esto es lo que sucede …

 $ git revert --no-commit d3289a7ab82fd76386d99bdd2c5e6496ecc62529.. error: Commit e88336ec528bc87dd6df3df82280b0fbd8c5a38d is a merge but no -m option was given. fatal: revert failed 

Entonces intenté …

 $ git revert -m 1 --no-commit d3289a7ab82fd76386d99bdd2c5e6496ecc62529.. error: Mainline was specified but commit 84ccf1084d17d470ee03b89a7649c4a783f2b914 is not a merge. fatal: revert failed 

Sí, puede hacerlo (desde el directory de nivel superior):

 git revert --no-commit <relevant SHA>.. 

Luego te comprometes como siempre y presionas.

Tenga en count que puede get algo similar usando git checkout <relevant SHA> -- . , pero esto no elimina los files que se han agregado desde la confirmación pertinente.

git revert es sin duda la forma más rápida de hacerlo, pero vale la pena mencionar que el git reset es más flexible que solo --hard :

 git reset --hard $commit git reset --soft '@{1}' git commit 

Esto significa:

  1. Cambie la twig actual para apuntar a $commit . Haga que el índice y la copy de trabajo se vean como $commit .
  2. Cambie la twig actual para que apunte a donde estaba antes de ejecutar el primer command, pero deje el índice y la copy de trabajo como $commit . Esto debería dejarlo con los cambios necesarios para volver a $commit .
  3. Cometer.