Guía de Git. Todo lo que deberías saber. ¿Te atreves?

Guía de Git

A lo largo de este curso de git aprenderemos cosas como ¿que son los hooks? ¿que son ramas? ¿como fusionarlas? etc.

¿Qué es git?

Git es un sistema de control de versiones creado por Linus Torvalds. Un sistema de control de versiones registra los cambios realizados en un archivo o conjunto de archivos.

Para explicarlo mejor imagina que tenemos un proyecto y en este proyecto tenemos muchos archivos, todos sus archivos en algún punto se van a convertir en nuestra versión inicial o versión 1 de nuestro proyecto. Después vamos a tener una versión 2 y conforme pasa el tiempo vamos a ir teniendo diferentes versiones.

Git lo que hace es monitorear todo lo que hacemos en nuestro proyecto ya se añadir, cambiar o eliminar líneas de código. Una de las ventajas que tenemos cuando usamos git es que podemos cambiar de versión de una forma muy sencilla y directa. Supongamos que tenemos un error en la versión 3 pero en la versión 2 no lo teníamos, entonces podemos ir a la versión 2 y buscar cuál fue el error que causa que no funcionen las cosas bien en la versión 3.

En git tenemos tres estados:

  1. Working directory aquí es donde normalmente estamos y trabajamos con nuestros proyectos es decir, aquí es donde abrimos nuestro editor de código y empezamos a hacer magia.
  2. Staging area aquí es donde escogemos que archivos están listos para pasar al último estado y también decidimos que archivos no lo están listos por ejemplo: supongamos que tenemos un archivo html que ya esta listo y un archivo css que aun no lo esta listo. En el staging area elegimos que nuestro html pasa a la siguiente fase pero nuestro css no.
  3. Repository aquí se registró todo los commit que hicimos a lo largo de nuestro proyecto.

Entonces recapitulando nuestro flujo de trabajo va a ser:

  1. Modificar, crear o editar una serie de archivos.
  2. Escoger los archivos que están listos.
  3. Registrar los archivos que están listos.

¿Como instalar git?

La instalación de git es muy sencilla y está tanto para windows para linux y como para mac.

Nos dirigimos a la página oficial de git y seleccionamos nuestro sistema operativo. Para windows y mac es una instalación típica, siguiente siguiente siguiente. En windows vamos a tener un extra y es que la instalación de git instala un terminal donde vamos a poder ejecutar comandos de git y olvidarnos del cmd de windows.

La instalación de linux es a través de la terminal y el gestor de paquetes. Simplemente ejecutamos el comando, que la página oficial de git nos facilita, en función de la distribución que uses y listo.

Configuración básica de git

El siguiente paso es hacer unas configuraciones básicas, para ello vamos a abrir la terminal y en el caso de windows vamos a abrir la nueva consola que nos instaló el paquete de git.

Lo primero es configurar nuestro nombre. Para ello solo tenemos que ejecutar:

git config --global user.name "aqui tu nombre"

Lo siguiente es configurar nuestro email. Igual que antes ejecutamos el siguiente comando:

git config --global user.email "aquí tu email"

Si queremos ver la configuración siempre podremos ejecutar:

git config --global user.name
git config --global user.email

También tenemos la opción de configurar los colores pero, esto es opcional aunque te lo recomiendo mucho porque siempre nos va a arrojar diferentes resultados, diferentes mensajes dependiendo de lo que estemos haciendo. Con esta configuración le decimos a git que los pinte de distintos colores esos resultados así distinguimos mejor que lo que nos está diciendo git. Para ellos solo ejecutamos el siguiente comando:

git config --global color.ui true

Ahora ya tenemos configurado los colores.

Si queremos ver toda nuestras configuraciones globales podemos ejecutar el comando:

git config --global --list

y esto nos va a dar un listado de nuestras configuraciones de lo que acabamos de hacer.

¿Como inicializar git en un proyecto?

Al fin vamos a empezar nuestro primer proyecto git. Para ello tengo una página bastante sencilla pero, con la que iremos trabajando y aprendiendo todos los comandos de git.

Ejemplo 1 grid bootstrap 4

Primero no vamos a la terminal, nos movemos al directorio de nuestro proyecto y ejecutamos el primer comando de git:

git init

Con este comando le indicamos a git que inicialice un repositorio nuevo. A partir de ahora git va a empezar a llevar el seguimiento de todo lo que ocurre dentro de nuestro proyecto, da igual si añadimos, borramos o actualizamos un fichero, git se enterará.

Este comando solo se utiliza una vez en cada inicialización.

Git status

Para saber el estado que se encuentra nuestro proyecto ejecutamos:

git status

Ejemplo 1 grid bootstrap 4

Como vemos nos muestra un listado de archivos pero, git nos esta indicado que aun no han sido añadido al repositorio.

Git add

Como vimos en el punto anterior teníamos archivos y directorios que aun no teníamos añadidos en nuestro repositorio. Para añadir un archivo en el repositorio simplemente ejecutamos:

git add index.php

Ahora si volvemos a ejecutar:

git status

Ejemplo 1 grid bootstrap 4

Nos muestra el mismo listado pero ya tenemos nuestro index.php añadido en el repositorio.

Tal vez en tu proyecto tengas muchos fichero y añadir uno a uno puede ser un poco coñazo. Para evitar eso git tiene un comando para añadir todo de golpe:

git add -A 
ó 
git add --all

Git commit

Vale ya tenemos archivos añadidos en nuestro repositorio de git pero, ¿para que hacemos esto? Bueno aquí empieza una de las partes más importante de tener un repositorio git y es poder commitear el estado actual de nuestro repositorio. Para hacerlo están sencillo como ejecutar:

git commit -m "esto es un mensaje"

Ejemplo 1 grid bootstrap 4

Esto lo que hará es hacer una foto del estado actual de nuestro repositorio. El mensaje es muy importante y tiene que ser lo más descriptivo posible.

Ahora si de nuevo ejecutamos:

git status

Ejemplo 1 grid bootstrap 4

Como puedes ver ya no tenemos nada.

Vamos a repetir el proceso pero, para ello vamos a modificar un fichero y vamos a volver a ejecutar:

git status 

Ejemplo 1 grid bootstrap 4

Como puedes ver git nos esta indicado que se ha modificado el fichero. En esta ocasión aparece en verde y no en rojo ¿por que? Porque ya agregamos anteriormente el fichero a nuestro repositorio y simplemente lo hemos modificado. Si añado uno nuevo y ejecuto:

git status

Ejemplo 1 grid bootstrap 4

Como ves ahora si me dice que tengo un fichero no añadido.

Ejecutamos:

git add -A

Esto lo que hará es añadirme el nuevo fichero y ya solo queda hacer la foto estatica para que git se la guarde. Para ello ejecutamos:

git commit -m "Nuevo fichero y modificado el anterior"

Con eso nuestro repositorio esta limpio y ya podemos continuar.

Git log

Este comando de git es muy interesante si queremos ver el historia de nuestros commits. Si ejecutamos:

git log 

esta es la info que nos devuelve:

git log

Pero, ¿qué significa esto?

  1. commit: Es un identificador único para el commit.
  2. Author: Nombre y email del creador del commit.
  3. Date: La fecha de creación del commit.
  4. Y el mensaje que pusimos en el commit.

Git checkout

Al principio del post comenté que con git podríamos ir de una versión a otra de nuestro proyecto, eso significa que podemos movernos entre commit con total libertad. No solo podemos movernos entre commit si no entre ramas y entre tags. Las ramas y los tags los veremos un poco más adelante.

¿Recuerdas el identificador del commit que nos daba git logs? pues vamos a usarlo para movernos entre los commits. Para ello ejecutamos:

git checkout <identificador-commit>

git checkout

Si verificamos nuestro código podremos ver que estamos en una versión anterior a la que estábamos. Si ejecutamos:

git log

git log 2

nuestro último commit ha desaparecido. Bueno realmente no ha desaparecido simplemente que en el punto donde estamos ese commit aun no ha ocurrido. Para regresar al punto donde estabamos ejecutamos:

git checkout master

Si nos fijamos ya ha vuelto nuestro código a su estado final.

Git reset

En git tenemos algo muy útil pero al mismo tiempo muy peligroso si no se usa bien.

Imaginate que has estado programando una nueva funcionalidad y después de hacer commit te das cuenta de que tiene errores y quieres deshacer el commit. Bueno pues aquí entra la magia de git reset. Este comando tiene tres formas de ejecutarlo y vamos a verlos uno a uno.

git reset –soft

Primero vamos a ver el estado actual de nuestro repositorio con:

git log

git log 3

Imaginemos que el commit f41fb613902f9b7cc47f1fdb23de392d6238a57a queremos deshacerlo, pues ejecutamos:

git reset --soft 48cb8d5c37c0298b0ddb9a037996d8df27ac931f

Si te fijas he cogido el commit anterior al que quiero deshacer.

Si ahora ejecutamos:

git log

git log 4

veras que ahora solo tenemos un commit y si ejecutamos:

git status 

git status 6

tenemos todos los cambios que se hicieron en el commit que hemos desecho.

git reset –mixed

Igual que hemos hecho antes, primero vamos a ver el estado de nuestro repositorio con un:

git log

git log 5

Igual que antes vamos a deshacer el último commit pero esta vez con mixed para que podamos ver la diferencia. Para ello ejecutamos:

git reset --mixed 48cb8d5c37c0298b0ddb9a037996d8df27ac931f

Si verificamos los logs:

git log 

git log 6

podemos ver que el resultado es el mismo que con soft pero, si ejecutamos:

git status

git status 7

aquí es donde vemos cambios. La diferencia entre git reset soft y git reset mixed es que mixed saca los ficheros nuevos, que tuviese ese commit, fuera de nuestro repositorio, es como si deshiciese el git add.

git reset –hard

Esta es la opción más dura y que más cuidado tenemos que tener de git reset. Para no perder la costumbre vamos a ver el estado del repositorio con:

git log

git log 7

Ahora vamos a ejecutar:

git reset --hard 48cb8d5c37c0298b0ddb9a037996d8df27ac931f

Si miramos nuestros logs:

git log

git log 8

Podemos comprobar que ha deshecho el commit perfectamente pero, si verfificamos el status:

git status

git status 8

esta totalmente limpio. Eso significa que git ha deshecho el commit pero, ha borrado todos los cambios que tenia el commit.

Hay que tener mucho cuidado con este reset porque podríamos borrar cosas por accidente.

git help

Bueno ahora te presento un comando que no ayuda a orientarnos un poco en las diferentes opciones que tiene git. Es una pequeña documentación que nos viene muy bien cuando no recordamos algún comando. Para que nos muestre la ayuda simplemente ejecutamos:

git help 

git help

y nos muestra la ayuda.