Skip to content

Instantly share code, notes, and snippets.

@estadoactivo
Created November 13, 2013 12:41
Show Gist options
  • Save estadoactivo/7448456 to your computer and use it in GitHub Desktop.
Save estadoactivo/7448456 to your computer and use it in GitHub Desktop.
Alguien pusheo commits que no debia, o por alguna razon se pretende "deshacer" commits que ya se enviaron al servidor central. Quick fix Buscar el commit a donde se pretende volver: (usar git log o git reflog, etc...), y despues hay que ejecutar estos commandos (donde a_donde_volver se reemplaza por el commit):
git reset a_donde_volver
git checkout HEAD .
git push --force
Narrado (for dummys)
Todo lo que voy a explicar es asumiendo que se esta trabajando en la rama master (que es la default en git), si no estas trabajando en la rama master, el comando "git branch" muestra la rama de trabajo en la que estas trabajando
Antes, que nada, se puede hacer un tag del master actual:
git tag ultimo_master master
Posteriormente, hay que encontrar el commit al cual se quiere volver, se pueden revisar los logs (el nombre de la rama es opcional, si no se indica usa la rama de trabajo actual):
git log [master]
Supongamos que el commit al que se quiere volver es 0123456789abcd..., puede ser util taguearlo para referenciaro facilmente mas adelante (aunque se puede hacer todo referenciando al commit, directamente)
git tag a_donde_volver 0123456789abcd...
Posteriormente, se hace un reset a para que la rama master local referencie a ese commit, y despues un checkout para cambiar los archivos y que coincidan
git reset a_donde_volver
git checkout HEAD .
Despues, hay que sobreescribir la referencia master remota con la actual, pero hay que usar --force para que git no verifique si se trata de un fast-forward (porque sino rechaza la operacion), recordar usar --force solamente en casos especificos como este.
git push --force
Y despues se puede seguir trabajando normalmente
Bonus track
Puede ser util crear un branch en el servidor a partir del master original antes de que se revierta (para poder analizarlo entre todos, etc...), para hacer esto:
git push origin ultimo_master:refs/heads/old_master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment