¿Cómo cambiar a una confirmación específica de Git sin perder todas las confirmaciones realizadas después ?
Quiero que se cambien los archivos locales, pero la base de datos de commits permanecerá intacta, solo el puntero de posición actual está configurado para commit actualmente seleccionado.
Quiero cambiar el estado de los archivos a una confirmación específica, ejecutar un proyecto y, cuando termine, restaurar los archivos a la última confirmación.
¿Cómo hacer esto sin comprimir toda la carpeta del proyecto?
Respuestas:
Si está en una determinada rama
mybranch
, simplemente continúe ygit checkout commit_hash
. Luego puede regresar a su sucursalgit checkout mybranch
. Tuve el mismo juego que biseca un error hoy :) Además, debes saber sobre git bisect .fuente
git checkout commit_hash
si está en un repositorio limpio y no necesita hacer ramificaciones. Podría ser más fácil para algunos casos de uso (como el mío).git bisect
referencia; ¡Qué herramienta extremadamente útil!Primero, use
git log
para ver el registro, elija la confirmación que desee, anote el hash sha1 que se utiliza para identificar la confirmación. A continuación, corregit checkout hash
. Después de que haya terminado,git checkout original_branch
. Esto tiene la ventaja de no mover el HEAD, simplemente cambia la copia de trabajo a un commit específico.fuente
git checkout <original_branch>
.git checkout HEAD
es efectivamente un NOOPgit reset --hard <hash>
cambia la CABEZA de la rama actual, mientrasgit checkout <hash>
obtiene un pago separado que no cambia ninguna rama, y puede regresar fácilmente sin conocer la identificación hash original de su rama como se muestra en esta respuesta.Además de las otras respuestas aquí que le muestran cómo
git checkout <the-hash-you-want>
vale la pena saber que puede volver a donde estaba usando:Esto suele ser más conveniente que:
Como puede anticipar,
git checkout @{-2}
lo llevará de regreso a la sucursal en la que se encontrabagit checkout
hace dos s, y de manera similar para otros números. Si puedes recordar dónde estabas para números más grandes, deberías obtener algún tipo de medalla por eso.Lamentablemente para la productividad,
git checkout @{1}
no te lleva a la sucursal en la que estarás en el futuro, lo cual es una pena.fuente
git checkout -
es un alias abreviado paragit checkout @{-1}
@{n}
sintaxis general , ya que funciona con muchos comandos git. Me resultó difícil agregar su taquigrafía sin hacer que la respuesta fuera bastante confusa. En cambio, he votado tu comentario, espero que la gente lo vea. Gracias de nuevo.git merge -
para fusionar la rama que había desprotegido por última vez en la rama desprotegida actualmente. Es comocd -
en bash.