2010-08-24 27 views
203

Recientemente me mudé de SVN a Git y estoy un poco confundido acerca de algo. Necesitaba ejecutar la versión anterior de un script a través de un depurador, así que hice git checkout <previous version hash> e hice lo que tenía que hacer.¿Cómo volver a la versión más reciente en Git?

Ahora quiero volver a la versión más reciente, pero no conozco el hash. Cuando escribo git log, no lo veo.

¿Cómo puedo hacer esto? Además, ¿existe una manera más fácil de cambiar versiones que escribiendo hashes, algo así como "retroceder dos versiones" o "ir a la más reciente cronológicamente"?

Respuesta

247

git checkout master debería hacer el truco. Para volver dos versiones, se podría decir algo así como git checkout HEAD~2, pero es mejor para crear una rama temporal basado en ese momento, así git checkout -b temp_branch HEAD~2

+4

fresco! 'git checkout master' es exactamente cómo cambio de una rama. Entonces, ¿eso significa que cuando reviso una versión anterior, básicamente estoy creando una rama? –

+3

@ Nathan: En git una rama es en su mayoría un puntero movible para una cierta revisión. Así que, conceptualmente, estás creando una especie de rama, pero no en el sentido de que git piense en ramas. – DLH

+2

Entonces, en el caso más simple, cuando tengo un montón de cambios lineales, cuando pago una revisión anterior, muevo el puntero HEAD allí, lo que significa que 'git log' se mostrará en relación con ese punto. ¿Y cuando pago por Master, muevo el puntero a la última versión de la rama principal? –

4

Se puede extraer el uso de nombres de rama, por una cosa.

Sé que hay varias maneras de mover la CABEZA, pero le dejaré a un experto en git que las enumere.

Solo quería sugerir gitk --all - Me pareció enormemente útil cuando empecé con git.

+3

+1 para 'gitk --all'. **Tan útil. – DLH

6

estoy empezando a profundizar en Git, así que no sé si he entendido bien, pero creo que la respuesta correcta a la pregunta de la OP es que se puede ejecutar git log --all con una especificación de formato de la siguiente manera: git log --all --pretty=format:'%h: %s %d'. Esto marca la versión actual desprotegida como (HEAD) y puede obtener la siguiente de la lista.

Por cierto, añadir un alias como este para su .gitconfig con un formato ligeramente mejor y se puede ejecutar git hist --all:

hist = log --pretty=format:\"%h %ai | %s%d [%an]\" --graph 

En cuanto a las versiones relativas, he encontrado este post, pero sólo habla de las versiones anteriores, probablemente no haya nada para referirse a las versiones más nuevas.

22

Esto hizo el truco para mí (yo todavía estaba en la rama principal):

git reset --hard origin/master

+23

** reset --hard ** es una exageración y demuestra que no está al tanto de las modificaciones que ha realizado. Esto puede hacer que pierda el código. – Thomio

+0

En mi caso, quise deshacerme de los cambios comprometidos accidentalmente no accionados. Sé que puede haber otros métodos para lograr eso. Estoy de acuerdo en que si no quiere perder sus cambios comprometidos no apurados, esto es pérdida de datos. –

29

cuando realice el pago a una específica cometer, git crea una rama separada. Por lo tanto, si se llama:

$ git branch 

verá algo como:

* (detached from 3i4j25) 
    master 
    other_branch 

para volver a la cabeza rama principal sólo tiene que comprobación a su rama principal de nuevo:

$ git checkout master 

Este comando eliminará automáticamente la rama separada.

Si git checkout no funciona, es probable que haya modificado los archivos en conflicto entre las ramas. Para evitar que pierdas código, git requiere que manejes estos archivos.Tiene tres opciones:

  1. Stash sus modificaciones (que puede hacer estallar más tarde): Reset-ing

    $ git stash 
    
  2. descartar los cambios de la rama individual:

    $ git reset --hard 
    
  3. Crear una nueva rama con las modificaciones anteriores y confírmelas:

    $ git checkout -b my_new_branch 
    $ git add my_file.ext 
    $ git commit -m "My cool msg" 
    

Después de este que pueda volver a su rama principal (versión más reciente):

$ git checkout master 
0

Una solución más elegante y simple es utilizar

git stash 

Será regrese a la versión local más resentida de la rama y también guarde los cambios en el alijo, por lo que si desea deshacer esta acción, haga lo siguiente:

git stash apply 
2

Al volver a una versión anterior,

$ git checkout HEAD~2 
Previous HEAD position was 363a8d7... Fixed a bug #32 

Puede ver su función de registro (hash) con este comando incluso en esta situación;

$ git log master --oneline -5 
4b5f9c2 Fixed a bug #34 
9820632 Fixed a bug #33 
... 

master se puede reemplazar con otro nombre de sucursal.

Luego, tóquelo, podrá volver a la función.

$ git checkout 4b5f9c2 
HEAD is now at 4b5f9c2... Fixed a bug #34 
1

Para volver a la versión más reciente:

git checkout <branch-name> 

Por ejemplo, git checkout master o git checkout dev

Cuestiones relacionadas