21 Explorando el historial
A los commits nos podemos referir a ellos con sus identificadores. Al último commit también nos podemos referir como HEAD. Añadamos una línea más al archivo prueba.txt.
nano prueba.txt
cat prueba.txtAhora, para ver el último cambio con el último commit:
git diff HEAD prueba.txtEn este caso, HEAD hace referencia al commit más reciente. Si omitimos HEAD, obtenemos el mismo resultado:
git diff prueba.txtTambién podemos comparar el archivo actual con versiones más antiguas del repositorio. La expresión HEAD~n hace referencia al ancestro que se encuentra n commits antes del último. Por ejemplo,
$ git diff HEAD~1 prueba.txtcompara la versión actual de prueba.txt con la versión almacenada en el commit inmediatamente anterior al último.
De manera similar,
git diff HEAD~2 prueba.txtcompara la versión actual con la de hace dos commits, y así sucesivamente.
Con git show vamos a ver los cambios con respecto a un commit anterior.
git show HEAD~1 prueba.txtTambién podemos referirnos a los commit por su identificador de números y letras enorme o por los primeros 7 números o letras (cambiar por sus identificadores de commits):
git diff 451b2ad469b96e13547e13dc0e718613acdc987c prueba.txt
git diff 451b2ad prueba.txtRevisemos el estado:
$ git statusCon la siguiente instrucción podemos regresar las cosas a como estaban antes de hacer el último cambio.
$ git checkout HEAD prueba.txt
$ cat prueba.txtO podríamos usar uno de los identificadores de commits:
git checkout 451b2ad prueba.txt
cat prueba.txt
git statusY para regresar al último commit de nuevo, es decir, volver a regresar a la versión antes de esos cambios, la última almacenada en el commit:
git checkout HEAD prueba.txt
cat prueba.txtEl comando
git checkout <commit> prueba.txtreemplaza el contenido actual de prueba.txt por la versión almacenada en el commit indicado, pero no cambia de rama ni mueve HEAD. Del mismo modo,
git checkout HEAD prueba.txtrestaura el archivo a la versión del último commit.
En versiones recientes de Git se recomienda utilizar:
git restore prueba.txtpara recuperar la versión del último commit, o
git restore --source=<commit> prueba.txtpara restaurar la versión almacenada en un commit específico. El comando git restore deja más claro que estamos recuperando archivos y evita confusiones con git checkout, que también se utiliza para cambiar entre ramas.
El comando git checkout revierte los archivos a alguna versión anterior siempre que no lo hayamos añadido al staging área. Para revertir un commit usamos la instrucción git revert [ID commit]. Supongamos que tenemos un error en el archivo prueba.txt y que ya hicimos commit y queremos revertir al último cambio. Los pasos que haríamos serían los siguientes:
git logpara identificar el ID del commit.Copiar el ID del commit
git revert [ID del commit]para revertir a ese cambio.Teclear el nuevo mensaje de commit.
Guardar y cerrar
Si ya añadimos los cambios al área de preparación, ya no podemos usar git checkout simplemente.
Realiza las siguientes instrucciones:
Crea una carpeta llamada
learn_revert.Muévete a la carpeta
learn_revertInicializa el repositorio.
Crea un archivo llamado
first.txty añade una línea de texto.Agrégalo al área de preparación y realiza el primer commit.
Crea el archivo
wrong.txty agrega una línea de texto.Agrégalo al área de preparación y realiza un commit.
Agrega una segunda línea de texto al archivo
first.txt, guárdalo, agrégalo al área de preparación y realiza un commit.Agrega una tercera línea de texto al archivo
first.txt, guárdalo, agrégalo al área de preparación y realiza un commit.Queremos deshacer el commit realizado cuando se añadió el archivo
wrong.txt. Como este commit fue el segundo de donde no estamos, podemos usargit revert HEAD~2(o podemos usargit logy encontrar el ID de ese commit).
¿Está el archivo wrong.txt? ¿Qué sucede con el historial de commits?
Otras opciones del historial del commit:
- Para ver tanto las diferencias entre los archivos y los ID de los commits. Se puede colocar solo el nombre de un archivo y solo mostrara los commit que afectaban ese archivo o si no se coloca el nombre del archivo aplica sobre todo el historial de commits.
git log --patch prueba.txt- Para mostrar las descripciones detalladas de las modificaciones y archivos.
git log -p- Para mostrar los nombres de los archivos afectados en cada commit.
git log --name-only- Para mostrar los archivos afectados en cada commit con la leyenda de si fueron modificados (M) o añadidos (A) o eliminados.
git log --name-statusConsultar el siguiente link para ver más opciones y ejemplos.

