¿Cómo puedo revertir un repositorio de git a una confirmación específica?

Resuelto Jonathan Vanasco asked hace 14 años • 7 respuestas

Mi repositorio tiene 100 confirmaciones en este momento. Necesito revertir el repositorio para confirmar 80 y eliminar todos los siguientes.

¿Por qué?

Se supone que este repositorio es para fusionar usuarios diversos. Un montón de fusiones llegaron como confirmaciones mías, debido a una edición excesiva. Esto se debió a un etiquetado incorrecto de mis sucursales remotas, donde 3 desarrolladores estaban etiquetados entre sí. Necesito restablecer hasta ese punto y luego avanzar.

Quería cambiar la base, como en este ejemplo: ¿Cómo puedo eliminar una confirmación en GitHub?

Sin embargo, git quiere que me ocupe mucho de los conflictos. ¿Hay alguna forma más simple?

Jonathan Vanasco avatar Dec 07 '10 07:12 Jonathan Vanasco
Aceptado
git reset --hard <old-commit-id>
git push -f <remote-name> <branch-name>

Nota: Como está escrito en los comentarios a continuación, usar esto es peligroso en un entorno colaborativo: estás reescribiendo el historial.

jtdubs avatar Dec 07 '2010 01:12 jtdubs

Para deshacer el compromiso más reciente hago esto:

Primero:

git log

obtenga la última identificación SHA para deshacer.

git revert SHA

Eso creará una nueva confirmación que hace exactamente lo contrario de su confirmación. Luego, puedes impulsar esta nueva confirmación para llevar tu aplicación al estado que tenía antes, y tu historial de git mostrará estos cambios en consecuencia.

Esto es bueno para rehacer inmediatamente algo que acaba de cometer, lo cual creo que es más frecuente en mí.

Como mencionó Mike, también puedes hacer esto:

git revert HEAD
Nick Res avatar Feb 13 '2016 22:02 Nick Res

De otra manera:

Verifique la rama que desea revertir, luego restablezca su copia de trabajo local a la confirmación que desea que sea la más reciente en el servidor remoto (todo lo posterior se despedirá). Para hacer esto, en SourceTree, hice clic derecho en y seleccioné "Restablecer BRANCHNAME a esta confirmación".

Luego navegue hasta el directorio local de su repositorio y ejecute este comando:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f -- tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME 

Esto borrará todas las confirmaciones posteriores a la actual en su repositorio local, pero solo para esa rama.

CommaToast avatar May 13 '2013 17:05 CommaToast

La mayoría de las sugerencias suponen que necesita destruir de alguna manera las últimas 20 confirmaciones, por lo que significa "reescribir el historial", pero no es necesario.

Simplemente cree una nueva rama a partir del compromiso #80 y trabaje en esa rama en el futuro. Las otras 20 confirmaciones permanecerán en la antigua rama huérfana.

Si absolutamente desea que su nueva rama tenga el mismo nombre, recuerde que las ramas son básicamente solo etiquetas. Simplemente cambie el nombre de su antigua rama por otro, luego cree la nueva rama en el compromiso #80 con el nombre que desee.

Ion Lesan avatar Sep 13 '2019 13:09 Ion Lesan