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:
$commit
. Haga que el índice y la copy de trabajo se vean como $commit
. $commit
. Esto debería dejarlo con los cambios necesarios para volver a $commit
.