Pregunta Reversión a un antiguo commit de Git en un repositorio público


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

La mejor respuesta que alguien podría darme es usar git revert X veces hasta que alcance el compromiso deseado.

Entonces, digamos que quiero volver a una confirmación de 20 commits old, tendría que ejecutarla 20 veces.

¿Hay alguna forma más fácil de hacer esto?

No puedo usar el restablecimiento porque este repositorio es público.


601
2018-01-05 17:01


origen


Respuestas:


Prueba esto:

git checkout [revision] .

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

No olvides . al final, muy importante. Esto aplicará cambios a todo el árbol. Entonces comprométete y deberías ser bueno.

Puedes deshacer esto por

git reset --hard; 

eso eliminará todas las modificaciones del directorio de trabajo y del área de ensayo.


891
2018-01-05 17:07



Para retroceder a una confirmación específica:

git reset --hard commit_sha

Para revertir 10 confirmaciones:

git reset --hard HEAD~10

Puedes usar "git revert" como en la siguiente publicación si no quieres reescribir el historial

¿Cómo revertir el repositorio de Git a una confirmación previa?


153
2018-02-14 11:01



Bueno, supongo que la pregunta es, ¿a qué te refieres con "retroceder"? Si no puedes reset porque es público y desea mantener intacto el historial de compromisos, ¿quiere decir que solo quiere que su copia de trabajo refleje una confirmación específica? Utilizar git checkout y el hash de compromiso.

Editar: Como se señaló en los comentarios, usando git checkout sin especificar una rama lo dejará en un estado "sin rama". Utilizar git checkout <commit> -b <branchname> para pagar en una sucursal, o git checkout <commit> . para pagar en la sucursal actual.


73
2018-01-05 17:04



El cartel original dice:

La mejor respuesta que alguien podría darme es usar git revert X veces hasta que   alcanzar el compromiso deseado

Entonces, digamos que quiero volver a una confirmación que es 20 commits old, tendría   para ejecutarlo 20 veces.

¿Hay alguna forma más fácil de hacer esto?

No puedo usar restablecer porque este informe es público.

No es necesario usar git revert X veces git revert puede aceptar un asigna el rango como argumento, por lo que solo debes usarlo una vez para revertir un rango de commits Por ejemplo, si desea revertir los últimos 20 commits:

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

El rango de compromiso HEAD~20.. es la abreviatura de HEAD~20..HEAD, y significa "comenzar desde el 20th padre del compromiso HEAD, y revierte todos los commits hasta HEAD ".

Eso revertirá los últimos 20 commits, asumiendo que ninguno de esos se fusionan comete Si hay commits de fusión, entonces no puedes revertirlos todos en un solo comando, tendrás que revertirlos individualmente con

git revert -m 1 <merge-commit>

Tenga en cuenta también que he probado usando un rango con git revert usando git versión 1.9.0. Si está usando una versión anterior de git, usando un rango con git revert puede o no puede funcionar

git revert Es mejor que git checkout

Tenga en cuenta que a diferencia esta respuesta que dice usar git checkout, git revert eliminará realmente los archivos que se agregaron en cualquiera de las confirmaciones que revertir, lo que hace que esta sea la forma correcta de revertir una serie de revisiones.

Documentación


34
2018-04-21 20:12



Paso 1: traer la lista de commits:

git log

Obtendrás 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 el hash de commit commit y péguelo para el pago:

git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f

Eso es todo.


20
2017-07-12 15:27



git read-tree -um @ $commit_to_revert_to

lo haré. Es "pago por git" pero sin actualizar HEAD.

Puedes lograr el mismo efecto con

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

si prefiere engarzar comandos de conveniencia juntos.

Estos lo dejan con su árbol de trabajo y su índice en el estado deseado, puede simplemente git commit para terminar.


8
2018-02-06 20:14



No estoy seguro de qué cambió, pero no puedo verificar un compromiso específico sin la opción --detach. El comando completo que funcionó para mí fue: git checkout --detach [commit hash]

Para volver del estado aislado tuve que pagar en mi sucursal local: git checkout master


1
2018-02-22 11:45