Suponiendo que su rama se llama master
tanto aquí como remotamente, y que su control remoto se llama origin
, puede hacer lo siguiente:
git reset --hard <commit-hash>
git push -f origin master
Sin embargo, debe evitar hacer esto si alguien más está trabajando con su repositorio remoto y ha retirado sus cambios. En ese caso, sería mejor revertir las confirmaciones que no desea y luego presionar de manera normal.
Actualización: ha explicado a continuación que otras personas han eliminado los cambios que ha introducido, por lo que es mejor crear una nueva confirmación que revierta todos esos cambios . Hay una buena explicación de sus opciones para hacer esto en esta respuesta de Jakub Narębski . Cuál es más conveniente depende de cuántas confirmaciones desea revertir y qué método tiene más sentido para usted.
Como de su pregunta está claro que ya ha utilizado git reset --hard
para restablecer su master
sucursal, es posible que deba comenzar a usar git reset --hard ORIG_HEAD
para mover su sucursal a donde estaba antes. (Como siempre con git reset --hard
, asegúrese de que git status
esté limpio, que esté en la rama correcta y que sea consciente de que git reflog
es una herramienta para recuperar confirmaciones aparentemente perdidas). También debe verificar que ORIG_HEAD
apunta a la confirmación correcta, con git show ORIG_HEAD
.
Solución de problemas:
Si recibe un mensaje como " ! [Control remoto rechazado] a60f7d85 -> maestro (gancho previo a la recepción rechazado) "
entonces debe permitir la reescritura del historial de sucursal para la sucursal específica. En BitBucket, por ejemplo, decía "No se permite reescribir el historial de sucursales". Hay una casilla de verificación llamada Allow rewriting branch history
que debe marcar.
origin/master
de que otros usuarios no te han tirado y empujado? Cambiar el historial de un repositorio público (es decir, no local) es algo que desea evitar en todo momento.