2010-03-11 22 views
302

A veces reviso alguna versión anterior del código para examinar o probar. He visto instrucciones sobre qué hacer si deseo modificar compromisos previos, pero supongo que no hago cambios. Después de hacerlo, p. git checkout HEAD^, ¿cómo vuelvo a la punta de la rama? .. git log ya no me muestra el SHA de la última confirmación.¿Cómo volver a la última confirmación después de verificar una confirmación anterior?

+3

En cuanto a la frase 'git log' de su pregunta, siempre puede ejecutar 'git log --all' (o más útilmente,' git log --oneline --graph --all'). – Wildcard

Respuesta

385

Si conoce el comprometen desea volver a es la cabeza de una rama, o está etiquetado, a continuación, puedes

git checkout branchname 

Puede también use git reflog para ver a qué otros commits ha referido su HEAD (o cualquier otro árbitro) en el pasado.


Editado para agregar:

En las nuevas versiones de Git, si sólo se ejecutó git checkout o alguna otra cosa que mover el HEAD vez, también se puede hacer

git checkout - 

para volver a donde sea antes de la última salida. Esto fue motivado por la analogía con el lenguaje cáscara cd - para volver a lo que uno se directorio de trabajo previamente en.

+15

me gustaría mencionar que el ejemplo típico sería "maestro git checkout". Una de las dificultades que tuve al aprender a utilizar git fue no saber qué palabras clave específicas (por ejemplo, "maestro") puedo sustituir en realidad por palabras de marcador de posición como "nombre de rama". – AbePralle

+3

'master' no es realmente ningún tipo de palabra clave, como lo es' HEAD'. Es solo el nombre de la sucursal por defecto en un nuevo repositorio. Puede ejecutar 'git branch' para obtener una lista de ramas en su repositorio, y' git tag -l' para obtener una lista de etiquetas. Del mismo modo, 'origin' es el nombre predeterminado del control remoto del que se clona un repositorio, pero no tiene nada de especial. – Novelocrat

+3

Si no estaba claro, 'git reflog' te da una lista de hashes, en cuyo punto puedes usar' git checkout [commit-hash] '. – jbnunn

6

Eche un vistazo a la GUI gráfica ... gitk que muestra todas las confirmaciones. A veces es más fácil trabajar gráfica ... ^^

+0

sí, esto es en realidad la forma en que he hecho en el pasado - pero no tener la interfaz gráfica de usuario disponible en este momento –

19

git checkout master

principal es la punta, o el último cometió. gitk solo le mostrará hasta dónde se encuentra en el árbol en ese momento. git reflog mostrará todas las confirmaciones, pero en este caso, solo quiere la sugerencia, así que git checkout master.

+0

gitk --all muestra todas las confirmaciones. – Kharoof

11

Había encontrado con esta pregunta en este momento y tienen algo que añadir

Para ir a la más reciente se comprometen:

git checkout $(git log --branches -1 --pretty=format:"%H") 

Explicación:

git log --branches muestra registro de confirmaciones de todas las sucursales locales
-1 limitan a una confirmación → más reciente cometer
--pretty=format:"%H" formato para mostrar sólo comprometerse de hash
git checkout $(...) salida uso de subnivel como argumento a favor de la caja

Nota:

Esto dará lugar a una cabeza separada, aunque (porque Checkout directamente a el compromiso). Esto se puede evitar extrayendo el nombre de la rama usando sed, que se explica a continuación.


Para ir a la rama de la más reciente comprometerse:

git checkout $(git log --branches -1 --pretty=format:'%D' |sed 's/HEAD -> \|tag: [^,]*\|,.*//g') 

Explicación:

git log --branches muestra registro de confirmaciones de todas las ramas locales
-1 límite a uno commit → commit más reciente
--pretty=format:"%D" formato para mostrar únicamente los nombres árbitro
|sed 's/HEAD -> \|tag: [^,]*\|,.*//g' ignoran CABEZA, etiqueta y extraer el primero de los varios nombres de rama
git checkout $(...) utilización salida del subnivel como argumento a favor de la caja

Nota:

Este será siempre solamente use el primer nombre de rama si hay múltiples para esa confirmación.


De todos modos, creo que la mejor solución sería simplemente para mostrar los nombres árbitro para el más reciente comprometerse a saber dónde caja para:

git log --branches -1 --pretty=format:'%D' 

P. ej crea el alias git top para ese comando.

3

Puede utilizar uno de los siguientes comandos git para esto:

git checkout master 
git checkout branchname 
-2

Si su última cometer es en la rama principal, puede simplemente usar

git checkout master 
+1

Bienvenido a SO. No se recomienda publicar respuestas que ya se hayan enviado. Esta solución ya ha mencionado varias veces. – AChampion

Cuestiones relacionadas