Rollback de la vieja fijación de Git en un repositorio público

¿Cómo puedo volver a un commit específico en git?

La mejor respuesta que alguien podría darme es usar git revert X veces, hasta que alcances la confirmación deseada.

Así que permítanme decir que quiero volver a la confirmación, que 20 confirmaciones, tuve que ejecutarla 20 veces.

¿Hay una manera más fácil de hacer esto?

No puedo usar reset, porque este repositorio está disponible públicamente.

609
05 янв. fijado por david 05 ene 2010-01-05 20:01 '10 a las 20:01 2010-01-05 20:01
@ 8 respuestas

Prueba esto

 git checkout [revision] . 

donde [revision] es el hash de confirmación (por ejemplo: 12345678901234567890123456789012345678ab ).

No te olvides . Al final es muy importante. Esto aplicará cambios a todo el árbol. Debe ejecutar este comando en la raíz del proyecto de proyecto git. Si se encuentra en algún subdirectorio, este comando solo cambia los archivos en el directorio actual. Entonces compromete, y deberías ser bueno.

Puedes cancelarlo.

 git reset --hard 

que eliminará todos los cambios del directorio de trabajo y el área de preparación.

900
05 янв. Respuesta dada por Alex Reisner el 5 de enero. 2010-01-05 20:07 '10 a las 20:07 2010-01-05 20:07

Retroceder a un compromiso específico:

 git reset --hard commit_sha 

Rollback 10 completa el trabajo:

border=0
 git reset --hard HEAD~10 

Puede usar "git revert", como en el siguiente mensaje, si no desea reescribir el historial

¿Cómo devolver el repositorio Git a la confirmación anterior?

154
14 февр. La respuesta es dada por Naga Kiran el 14 de febrero. 2013-02-14 14:01 '13 a las 2:01 pm 2013-02-14 14:01

Bueno, creo que la pregunta es, ¿qué quiere decir con "retroceso"? Si no puede reset , porque está disponible públicamente y desea mantener intacto el historial de confirmación, ¿quiere decir que solo desea que su copia de trabajo refleje una confirmación específica? Utilice git checkout y cometa hash.

Edición: como se indica en los comentarios, el uso de git checkout sin especificar una rama lo llevará al estado "sin rama". Use git checkout <commit> -b <branchname> para registrar una sucursal o git checkout <commit> . Para comprobar en la rama actual.

74
05 янв. La respuesta la da Ben el 5 de enero. 2010-01-05 20:04 '10 a las 8:04 pm 2010-01-05 20:04

El cartel original dice:

La mejor respuesta que alguien podría darme fue usar git revert X veces, hasta que llegué a la solución deseada.

Entonces, permítanme decir que quiero volver a la confirmación, que es 20 confirmaciones, tengo que ejecutarla 20 veces.

¿Hay una manera más fácil de hacer esto?

No puedo usar restablecer, porque este repositorio está disponible públicamente.

No hay necesidad de usar git revert X veces. git revert puede tomar un rango de confirmación como argumento, por lo que solo necesita usarlo una vez para devolver un rango de confirmación. Por ejemplo, si desea devolver las últimas 20 confirmaciones:

 git revert --no-edit HEAD~20.. 

El rango de fijación HEAD~20.. es la abreviatura de HEAD~20.. HEAD~20..HEAD y significa "comenzar con la 20ª HEAD de fijación de los padres y devolver todas las fijaciones a HEAD".

Esto devolverá las últimas 20 confirmaciones, asumiendo que ninguna de ellas es una confirmación. Si hay confirmaciones de fusión, entonces no puede devolverlas todas en un solo comando, deberá cancelarlas individualmente usando

 git revert -m 1 <merge-commit> 

También tenga en cuenta que he probado utilizando el rango con git revert con la versión 1.9.0 de git. Si está utilizando una versión anterior de git, el uso del rango con git revert puede o no funcionar.

git revert mejor que git checkout

Tenga en cuenta que, a diferencia de esta respuesta, que dice que al usar git checkout , git revert realmente eliminará los archivos que se hayan agregado a cualquiera de las confirmaciones que devuelva , lo que hace que sea la forma correcta de devolver un rango de cambios.

Documentacion

35
21 апр. respuesta dada por el usuario456814 21 de abril 2014-04-21 23:12 '14 a las 23:12 2014-04-21 23:12

Paso 1: muestra una lista de confirmaciones:

 git log 

Obtendrá una lista, como en este ejemplo:

 [Comp:Folder User$ git log commit 54b11d42e12dc6e9f070a8b5095a4492216d5320 Author: author <author@gmail.com> Date: Fri Jul 8 23:42:22 2016 +0300 This is last commit message commit fd6cb176297acca4dbc69d15d6b7f78a2463482f Author: author <author@gmail.com> Date: Fri Jun 24 20:20:24 2016 +0300 This is previous commit message commit ab0de062136da650ffc27cfb57febac8efb84b8d Author: author <author@gmail.com> Date: Thu Jun 23 00:41:55 2016 +0300 This is previous previous commit message ... 

Paso 2: Copie los hashes de confirmación y péguelos para verificación:

 git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f 

Lo que es todo

20
12 июля '16 в 18:27 2016-07-12 18:27 Igor da respuesta 12 de julio de '16 a las 18:27 2016-07-12 18:27
 git read-tree -um @ $commit_to_revert_to 

lo haré Esto es "git checkout", pero sin actualizar el HEAD.

Puedes lograr el mismo efecto con

 git checkout $commit_to_revert_to git reset --soft @{1} 

Si prefieres combinar comandos convenientes juntos.

Te dejan con tu árbol de trabajo e índice en el estado deseado, simplemente puedes completar git commit .

8
06 февр. la respuesta es dada por jthill 06 feb. 2016-02-06 23:14 '16 a las 23:14 2016-02-06 23:14

No estoy seguro de qué ha cambiado, pero no puedo verificar una confirmación específica sin la opción --detach . El equipo completo que trabajó para mí fue: git checkout --detach [commit hash]

Para volver del estado desconectado, tuve que verificar mi sucursal local: git checkout master

1
22 февр. La respuesta es dada por Ken el 22 de febrero. 2017-02-22 14:45 '17 a las 2:45 pm 2017-02-22 14:45

Creo que entiendo tus preguntas, eso es lo que encontré para resolverlo. y no hay una solución GUI, puede usar el comando solo para resolverlo, y es muy simple.

Paso 1: Crea una etiqueta de confirmación antigua que quieras devolver.

como etiqueta v2.0

Paso 2: git checkout v2.0

Aquí está, ahora su HEAD apunta al compromiso 'v2.0', pero el asistente aún apunta al último compromiso.

C: \ Archivos de programa \ Git \ doc \ Git \ html \ git -checkout.html Este documento puede ayudarlo.

o ingresa git ayuda <protección>

0
02 дек. La respuesta se da Zian Lai 02 de diciembre. 2017-12-02 23:47 '17 a las 23:47 2017-12-02 23:47

Otras preguntas acerca de las etiquetas o hacer una pregunta