¿Cómo puedo hacer retroceder a un commit específico en git ?
La mejor respuesta que alguien me podía dar era usar git revert
X veces hasta que alcanzara la confirmación deseada.
Entonces, digamos que quiero volver a una confirmación que tiene 20 confirmaciones antiguas, tendría que ejecutarla 20 veces.
¿Hay una manera más fácil para hacer esto?
No puedo usar reset porque este repositorio es público.
git
git-checkout
git-revert
David
fuente
fuente
Respuestas:
Prueba esto:
donde
[revision]
está el hash commit (por ejemplo:)12345678901234567890123456789012345678ab
.No olvides
.
al final, muy importante. Esto aplicará cambios a todo el árbol. Debe ejecutar este comando en la raíz del proyecto git. Si está en un subdirectorio, entonces este comando solo cambia los archivos en el directorio actual. Entonces comprométete y deberías ser bueno.Puedes deshacer esto por
eso eliminará todas las modificaciones del directorio de trabajo y el área de preparación.
fuente
Para revertir a una confirmación específica:
Para revertir 10 confirmaciones:
Puede usar "git revert" como en la siguiente publicación si no desea reescribir el historial
¿Cómo revertir el repositorio de Git a una confirmación previa?
fuente
Bueno, supongo que la pregunta es, ¿qué quieres decir con 'retroceder'? Si no puede
reset
porque es público y desea mantener intacto el historial de confirmación, ¿quiere decir que solo quiere que su copia de trabajo refleje una confirmación específica? Usegit checkout
y el hash commit.Editar: como se señaló en los comentarios, el uso
git checkout
sin especificar una rama lo dejará en un estado "sin rama". Se usagit checkout <commit> -b <branchname>
para pagar en una rama ogit checkout <commit> .
para pagar en la rama actual.fuente
git checkout
: es libre de visitar cualquier sucursal (actual o nueva) que desee. Actualizaré mi respuesta para que no sea ambigua.git reset
eliminar esos archivos, lo que dice que no desea hacer. Intenta hacerlo en una rama separada:git checkout <commit> -b <branchname>
no tendrás archivos estancados en esa rama .checkout
es que no eliminará los archivos que se agregaron en una confirmación anterior.El cartel original dice:
No es necesario usar
git revert
X veces.git revert
puede aceptar un rango de confirmación como argumento, por lo que solo necesita usarlo una vez para revertir un rango de confirmaciones. Por ejemplo, si desea revertir las últimas 20 confirmaciones:El rango de confirmación
HEAD~20..
es cortoHEAD~20..HEAD
y significa "comenzar desde el vigésimo padre de la confirmación HEAD, y revertir todas las confirmaciones hasta HEAD".Eso revertirá los últimos 20 commits, suponiendo que ninguno de ellos sea commit de fusión. Si hay confirmaciones de fusión, entonces no puede revertirlas todas en un solo comando, deberá revertirlas individualmente con
Tenga en cuenta también que he probado usando un rango con el
git revert
uso de git versión 1.9.0. Si está utilizando una versión anterior de git, utilizar un rango congit revert
mayo o mayo no funciona.En este caso,
git revert
se prefiere sobregit checkout
.Tenga en cuenta que, a diferencia de esta respuesta que dice usar
git checkout
, engit revert
realidad eliminará todos los archivos que se agregaron en cualquiera de las confirmaciones que está revocando , lo que hace que esta sea la forma correcta de revertir un rango de revisiones.Documentación
fuente
Paso 1: buscar la lista de confirmaciones:
Obtendrá una lista como en este ejemplo:
Paso 2: copie el hash de confirmación necesario y péguelo para pagar:
Eso es todo.
fuente
lo haré. Es "git checkout" pero sin actualizar HEAD.
Puedes lograr el mismo efecto con
si prefiere encadenar comandos de conveniencia juntos.
Estos lo dejan con su árbol de trabajo e índice en el estado deseado, puede
git commit
terminar.fuente
¿Quieres el modo HEAD separado?
Si desea revertir el tiempo X a una determinada confirmación con una CABEZA DETACHADA (lo que significa que no puede estropear nada), entonces, por supuesto, use lo siguiente:
(reemplace X con la cantidad de confirmaciones que desea volver)
IE para retroceder una confirmación:
fuente
Digamos que trabajas en un proyecto y después de un día más o menos. Observa que una característica aún le está dando errores. Pero no sabe qué cambio realizó que causó el error. Por lo tanto, debe pescar los compromisos de trabajo anteriores. Para volver a una confirmación específica:
Ok, entonces ese commit funciona para ti. No más errores. Usted identificó el problema. Ahora puede volver a la última confirmación:
Y revise un archivo específico antes de que cause el error (en mi caso, uso el ejemplo Gemfile.lock):
Y esta es una forma de manejar los errores que creó en commits sin darse cuenta de los errores hasta más tarde.
fuente
Puede encontrar la identificación de confirmación relacionada con cada confirmación en la sección de confirmaciones de GitHub / BitBucket / Gitlab. Es muy simple, suponga que su ID de confirmación es 5889575, luego, si desea volver a esta parte en su código, simplemente necesita escribir
Esto lo llevará a ese punto de tiempo en su código.
fuente
No estoy seguro de qué cambió, pero no puedo pagar una confirmación específica sin la opción
--detach
. El comando completo que funcionó para mí fue:git checkout --detach [commit hash]
Para regresar del estado separado, tuve que revisar mi sucursal local:
git checkout master
fuente
master
resuelve el problema de permanecer separado, mientras trabajabagit reset --hard
ogit checkout -- .
trabajó pero permaneció separadoAquí hay un ejemplo para hacer eso
fuente