2012-04-19 11 views
171

Cómo pasar a la confirmación de Git específica sin perder todas las confirmaciones realizadas después de?Cambiar temporalmente la copia de trabajo a una confirmación de Git específica

Quiero que los archivos locales se modifiquen, pero la base de datos de confirmaciones se mantendrá intacta, solo el puntero de posición actual se establece en la confirmación seleccionada actualmente.

Quiero cambiar el estado de los archivos a la confirmación específica, ejecutar el proyecto y, cuando termine, restaurar los archivos de nuevo a la última confirmación.

¿Cómo hacer esto sin comprimir toda la carpeta del proyecto?

+0

Relacionado: [Volver a una confirmación anterior de Git] (http://stackoverflow.com/q/4114095/456814). –

Respuesta

251

Si se encuentra en una determinada sucursal mybranch, simplemente continúe y git checkout commit_hash. Luego puede regresar a su sucursal al git checkout mybranch. Tuve el mismo juego biseccionando un error hoy :) Además, debe saber acerca de git bisect.

+1

Me di cuenta de que --hard está haciendo exactamente lo que yo quiero, y no se pierde ningún commit. – Paul

+6

Tenga en cuenta que puede hacer 'git checkout commit_hash' si está en un repositorio limpio y no necesita hacer una bifurcación. Puede ser más fácil para algunos casos de uso (como el mío). – enderland

+0

@enderland: su HEAD siempre apunta a alguna rama, normalmente :) –

39

Primero, use git log para ver el registro, elija la confirmación que desea, anote el hash sha1 que se utiliza para identificar la confirmación. A continuación, ejecute git checkout hash. Después de que haya terminado, git checkout original_branch. Esto tiene la ventaja de no mover el CABEZAL, simplemente cambia la copia de trabajo a un compromiso específico.

+4

Creo que te refieres a 'git checkout '. 'git checkout HEAD' es efectivamente un NOOP –

+0

Observé que el reinicio --hard está haciendo exactamente lo que yo quiero, y no se pierde ninguna confirmación. – Paul

+3

'git reset --hard ' cambia el HEAD de la rama actual, mientras que con 'git checkout ' obtienes un checkout independiente que no cambia ninguna rama, y ​​puedes regresar fácilmente sin conocer la identificación hash original de tu sucursal como se muestra en esta respuesta. – jofel

Cuestiones relacionadas