En Git, ¿cómo deshace una rebase si no está satisfecho con ella?
Git no tiene ejecución en seco para rebase. Si hice un cambio de base y aún no lo presioné, ¿cómo retrocedo a antes, como si nunca hubiera sucedido?
En Git, ¿cómo deshace una rebase si no está satisfecho con ella?
Git no tiene ejecución en seco para rebase. Si hice un cambio de base y aún no lo presioné, ¿cómo retrocedo a antes, como si nunca hubiera sucedido?
Respuestas:
Puede usar el reflog para encontrar la primera acción antes de que comenzara la rebase y luego restablecerla. p.ej
$ git reflog
b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...
$ git reset HEAD@{2} --hard
Ahora debería volver a antes de que comenzara la rebase.
Para encontrar el lugar correcto para restablecer, simplemente elija la entrada más cercana a la parte superior que no comience con "rebase".
Si la rebase es lo único que ha hecho en la rama, es decir, no tiene confirmaciones / cambios sin presionar, entonces puede eliminar la rama local con git branch -Dy luego verificarla nuevamente:
$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch
O para el mismo efecto, puede restablecer --hard a la rama de origen:
$ git reset --hard origin/my-branch
Si hizo esto mientras tenía otras confirmaciones sin presionar, las habrá perdido. En ese caso, simplemente use el enfoque de reflog anterior para volver a la entrada de reflog donde realizó las confirmaciones.
ORIG_HEADel valor hash original de la rama que se está rebasando. Entonces, en lugar de encontrar el número 2 para HEAD@{2}, puede usar ORIG_HEAD... pero solo si ORIG_HEADaún no lo molestan. Un montón de comandos de Git lo configuran (rebase, am, reset y merge, en diversas circunstancias).
Rebase mantiene una copia de seguridad del estado anterior como ORIG_HEAD.
Para que pueda revertir la última rebase ejecutando:
git reset --hard ORIG_HEAD