Git: recuperar un archivo o todo el repositorio a una versión anterior

Tutorial de Git sobre cómo recuperar un archivo en concreto o todo el repositorio a una versión anterior en la que todo funcionaba bien.

¿Utilizas Git como control de versiones para tus proyectos? ¿Te estas iniciando en el uso de Git y quieres aprender más? Una de las buenas opciones que nos proporciona git es la posibilidad de probar cosas y ante un problema poder recuperar un archivo o todos a una situación en la que sabíamos que todo funcionaba bien.

Partimos de la base de que conoces qué es Git, que conoces lo básico y que en algún momento lo has utilizado para alguna tarea.Todos cometemos errores, pero herramientas como Git nos viene a solucionar algunos de esos errores y problemas en lo referente al código.

Imagina que modificas un archivo y parece que todo está bien, lo añades (git add) y realizas un “commit” de la modificación (git commit).

Después de eso decides que ese archivo necesita un “último ajuste” y finalmente el archivo queda completamente irreconocible y quizás no funcionando como esperabas. ¿Qué podemos hacer?

Podemos recuperar el archivo (prueba.txt en los ejemplos siguientes) al estado en el que estaba antes de la modificación, es decir al estado en el que estaba en el último “commit” para eso utiliza el comando git checkout al último commit conocido que en este caso está en HEAD:

 git checkout HEAD prueba.txt

Pero si esa versión no es buena, o si quieres volver el archivo en cuestión no a esa versión si no a una anterior en el tiempo, primero deberemos comprobar en el registro log de ese directorio de git los “commits” realizados para poder escoger a la versión que deseamos. Echamos un vistazo a los logs con este comando:

 git log --oneline

Lo que nos dará una salida “algo” similar a esta (con las lógicas diferencias de “commits”, etc…)

79a4e5f commit prueba
f449007 segundo commit
55df4c2 Primer commit del proyecto.

Imaginemos que queremos devolver el archivo prueba.txt a la versión como estaba en nuestro primer commit del proyecto. Para ello escribiremos el siguiente comando

 git checkout 55df4c2 prueba.txt

Ahora la versión antigua del archivo ha sido restaurada en el directorio de trabajo. Puedes comprobar el estado del directorio de trabajo mediante el comando git status. No olvides que una vez restaurado el archivo, es necesario volver a añadir el archivo y volver a hacer un “commit” ya que el archivó cambió.

 git add prueba.txt
 git commit -m 'restaurar prueba.txt al estado del primer commit.'

Comprobemos en el log de Git que efectivamente todo ha ido como queríamos:

git log --oneline
d512580 restaurar prueba.txt al estado del primer commit.
79a4e5f commit prueba
f449007 segundo commit
55df4c2 Primer commit del proyecto.

También podemos llevar no sólo un archivo a un punto predeterminado, si no todos los archivos del repositorio, para ello escribimos:

git checkout 55df4c2

Al hacer esto, tu repositorio va atrás en el tiempo por completo, así que si ahora empiezas a trabajar sobre él podrías destruir tu futuro trabajo. Por defecto Git asume que no es eso lo que quieres hacer, así que separa donde se desarrolla el trabajo HEAD del proyecto y te deja empezar a trabajar.

Aquí habría que empezar a hablar de las ramas o “branch” y de cómo trabajar con ramas paralelas del proyecto, pasar de HEAD a las ramas y finalmente unir la que deseemos. Pero eso ya para otro artículo.

Espero que os haya quedado claro cómo volver a una versión antigua de un archivo, que era el tema de este artículo. Os animo a probar con unos directorios y archivos de prueba y ver cómo evoluciona el archivo trabajando con Git y devolverlo a diferentes estados.

Este artículo ha estado inspirado en este escrito en inglés por Seth Kenlon para opensource.com, que podéis encontrar en este enlace:

Os aconsejo toda la serie de artículos que está preparando, y quizás de alguno más encontraréis en mi blog su adaptación ¿os parecen interesantes?

Enlaces de interés a otros artículos sobre Git:

Pichar sobre la imagen para ampliar y poder descargar

——————————————————-

Un pensamiento en “Git: recuperar un archivo o todo el repositorio a una versión anterior

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s