Recuperar la versión anterior de ficheros en Git es una de las tareas más comunes que puede realizar un programador. Suele pasar que nos hemos puesto a programar y hemos llegado hasta tal punto que lo mejor es volver al punto donde comenzamos.
Revisando versiones
El comando git log es el que nos va a permitir revisar las instantáneas (snapshots) de ficheros en nuestros repositorio. Por lo que git log nos va a mostrar el histórico de cualquier fichero dentro del repositorio. Si ejecutamos git log sin parámetros este nos mostrará todas las revisiones realizadas desde la más reciente a la más antigua.
1 |
$ git log |
Para comprobar las versiones de un fichero determinado indicaremos a continuación el nombre del fichero.
1 |
$ git log fichero.php |
Como puede que se nos muestren demasiadas revisiones, vamos a usar el parámetro –n para filtrar un número determinado de ellas.
1 |
$ git log -n 3 fichero.php |
Si la única información que necesitamos es el número de revisión podemos simplificar la salida en una sola linea usando el parámetro —oneline
1 |
$ git log --oneline -n 3 fichero.php |
Y en caso de necesitar información detallada de los cambios usaremos el parámetro –stat
1 |
$ git log --oneline --stat -n 3 fichero.php |
Si trabajamos en grupo es posible filtrar por el autor del commit. Por ejemplo, vamos a buscar cualquier usuario que contenga el nombre Luis.
1 |
$ git log --author="\\(Luis*\)" |
Otro método muy utilizado es buscar dentro del mensaje comiteado.
1 |
$ git log --grep="\\(mensaje\)" |
Y también vamos a poder filtrar por fechas usando los argumentos since, after, before.
1 |
$ git log --since="2019-06-25" |
Restaurando versiones
Una vez localizada la versión del fichero que queremos restaurar vamos a usar el comando git checkout seguido de la versión del fichero.
1 |
$ git checkout <version> |
Git nos va a avisar de que podemos perder uno o varios commits registrados desde la versión que hemos decidido recuperar por lo que si queremos conservar estas versiones las podemos copiar a una rama alternativa.
1 |
$ git branch rama <version> |
La mejor alternativa a la hora de recuperar una versión antigua es hacerlo sobre una nueva rama. De esta forma podemos trabajar con la revisión en la nueva rama que acabamos de crear y ya cuando tengamos los cambios definitivos podemos realizar un merge de esta en la rama deseada.
1 |
$ git checkout -b hotfix <version> |
Comparación de versiones
Para comparar diferencias entre versiones usaremos el comando git diff
1 |
git diff <version> <verion> |