31

Basado en ¿Cómo puedo deshacer el último commit en Git?.

¿Hay alguna forma de regresar un repositorio Git a un commit en espeficico?.

Por ejemplo:

  • commit a "Primer commit"
  • commit b
  • commit c
  • commit d
  • commit e
  • commit f
  • commit g
  • commit h "Versión actual"

¿Hay forma de regresar al "commit c"?.

jasilva
  • 4,972
  • 6
  • 29
  • 45

2 Answers2

32

Sólo debes hacer git checkout commitC donde commitC es el hash de dicho commit.

Ejemplo:

Buscas en el log de git cuál es el commit al que quieres regresar:

git log

Tendrás algo como esto:

commit eb9b03c2e22305c965b610aa84a7d316e5cb208d
Author: oscar <oscar@oscar.(none)>
Date:   Thu Sep 19 16:05:51 2013 +0200

    commit3

commit 96046152e2515d651d777bac66602e4a50654f49
Author: oscar <oscar@oscar.(none)>
Date:   Thu Sep 19 00:13:37 2013 +0200

    commit2

commit 23abd7d49c00541fcac17acb1babd7a60a3e7c6e
Author: oscar <oscar@oscar.(none)>
Date:   Wed Sep 18 23:53:25 2013 +0200

    commit1 

Puedes ver más información sobre git log acá.

Luego haces esto:

git checkout eb9b03c

Para más información sobre git checkout puedes ver acá.

Entonces tu HEAD estará apuntando hacia el commit3, siendo el resultado que necesitas.

Gepser Hoil
  • 3,463
  • 5
  • 29
  • 58
17

Solución

Basta con ejecutar el siguiente comando (remplazar <hash>):

$ git checkout <hash>

Explicación

Para poder realizar el salto de una confirmación (commit) a otra, debes conocer el número (hash) por el cual quedó registrado. Tomando en cuenta que el libro oficial de Git en español, sección 2.3 Fundamentos de Git - Viendo el histórico de confirmaciones, nos dice:

Después de haber hecho varias confirmaciones, o si has clonado un repositorio que ya tenía un histórico de confirmaciones, probablemente quieras mirar atrás para ver qué modificaciones se han llevado a cabo. La herramienta más básica y potente para hacer esto es el comando git log.

Al ejecutar el comando git log sobre tu proyecto, tendrás algo parecido a esto:

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    Cambiado el número de versión

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    Removido código de prueba innecesario

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    Primera confirmación

El hash (o número de confirmación) será el conjunto alfanumérico que está seguido de la palabra commit. Copiarás dicho hash para utilizarlo con el comando git checkout <hash> que se encargará de mover el puntero HEAD de tu proyecto a la confirmación indicada. Ejemplo visual (tomando en cuenta que estás el proyecto está la rama master):

Ejemplo de git checkout

De esta forma podemos percibir que aunque tu puntero ahora apunta a una captura anterior, tus cambios posteriores a ella siguen existiendo.

Puedes obtener más información oficial y en español relacionado a este tema en la siguiente liga: 6.1 Las herramientas de Git - Selección de confirmaciones de cambios concretas


SHA corto: Simplemente dándole los primeros caracteres del código SHA-1, Git es lo suficientemente inteligente como para figurarse cual es la confirmación de cambios (commit) deseada. Es necesario teclear por lo menos 4 caracteres y estos han de ser no ambiguos --es decir, debe existir un solo objeto en el repositorio cuyo código comience por dicho trozo inicial del SHA--.

Chofoteddy
  • 5,975
  • 5
  • 25
  • 65