¿Necesita crear una twig para verificar una revisión de git específica?

Una cosa común que me gustaría hacer es revertir mi copy de trabajo a una revisión en particular, hacer algunas testings y luego volver a ponerla al frente de mi maestro actual. En el pasado, ingenuamente hice un "hash de git checkout" solo para perder la cabeza. Desde entonces, aprendí que puedo crear una sucursal y verificar eso, volver atrás y eliminar la sucursal, pero parece que son demasiados los pasos para realizar una simple comprobación. En el lenguaje de SVN, ¿hay alguna forma de revertir rápidamente y luego volver rápidamente a la punta del tronco en git?

Editar: Creo que mi confusión se debe al hecho de que cuando pago un hash y luego git log, no veo los cambios que ocurrieron después del hash comprobado (que es razonable, cuando lo piensas). Pero la respuesta aceptada es correcta; "git checkout branch" restaurará el encabezado a la twig anterior.

Suponiendo que ya estás en una sucursal (que siempre deberías ser para los cambios que deseas mantener), puedes hacer

git checkout <revision to check out> 

Esto lo llevará fuera de la twig de tema en la que estaba trabajando (sin ramificación), en la cual la copy de trabajo se refiere directamente a una ID de confirmación en lugar de a una twig de forma normal.

Luego, para retroceder, simplemente:

 git checkout <old branch name> 

Una forma útil de pensarlo es esta: el pago por git nunca altera las twigs; simplemente cambia lo que su copy de trabajo está mirando actualmente (es decir, HEAD), que podría ser una twig (en cuyo caso commits actualizará la twig) o un hash de confirmación aleatorio.

Como tal, siempre que los cambios que desea mantener estén en una sucursal, no tiene que preocuparse de que Git Checkout los pierda.

Puede crear una sucursal en la confirmación específica que desea pagar (desde la página de manual)

 git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>] 

así que complete el <start-point> como SHA1 para el que quiere que su nueva twig <branchname> comience y no <branchname> su 'head' de una twig en expansión.

Habrá otras cosas que probablemente desee hacer para mantener algunos de sus files de trabajo en el estado que desee ….

Sí, puedes visitar cualquier revisión arbitraria con "git checkout" como describes. Si solicita una revisión arbitraria en lugar de una sucursal, git no tendrá ninguna forma obvia de realizar un seguimiento de los cambios que realice. Puedes ver dónde estabas antes consultando el reflog ("git reflog show"), pero en general, habrías estado en una sucursal antes, así que presumiblemente solo querrás cambiar a eso con "git checkout master" o similar.

Tenga en count que este método no se ocupará automáticamente de los cambios no confirmados en su área de trabajo, ya sea confirmando o ocultando los cambios antes de moverse entre las twigs, o use "git checkout -m" para llevarlos a medida que se mueve (y prepárese para tratar con conflictos de fusión si los cambios que estás llevando a cabo no son triviales).

Creo que las versiones recientes de git han introducido la abreviatura "@ {- 1}" para "dónde estaba antes de moverme por última vez", que en realidad podría ser lo que quieres en este caso. (No lo he usado, solo lea sobre esto en las notas de la versión).

Si desea que Git muestre la punta de alguna línea de cambios, debe tenerla ramificada o labelda. Pero incluso si no haces una twig, ninguna de las confirmaciones se pierde. Permanece en el repository como un nodo de basura (es decir, no se puede acceder a través de ninguna twig o label), y se elimina solo algunos días / semanas más tarde cuando se hace "git gc".

Entonces, si desea tener un acceso fácil a los cambios, lo mejor es crear una sucursal temporal y trabajar allí. Si realiza confirmaciones fuera de una sucursal y luego realiza la compra en otra sucursal, necesitará usar el command "git reflog" o search en los loggings (directory ".git / logs") para averiguar cuál fue el hash de los cambios que perdiste. Cuando conoces el hash, puedes hacer "hash de pago de git" o "git checkout -b new_branch hash" y recuperar la propina.