Tutorial de Git

En esta lista de reproducción os mostraré cómo utilizar Git, paso a paso, de forma clara y en castellano. Aprenderemos los comandos para la terminal que te darán la clave para aprender a usar este popular sistema de control de versiones. El tutorial es compatible con cualquier sistema operativo aunque como referencia el soporte está pensado para UNIX.

4:23

1. ¿Qué es Git?

En este primer episodio del Tutorial de Git discuto qué es Git, por qué se ha vuelto tan popular en la industria del software y qué ventajas nos aporta frente a otros sistemas de control de versiones ya existentes.

8:53

2. Cómo instalar Git

En este episodio me centro en la instalación de Git en Windows, Linux y MacOS X. Instalar Git en sistemas UNIX es particularmente sencillo. En Windows también hay alternativas fáciles de instalar.

8:56

3. Creando tu primer commit

Una vez que Git se encuentra instalado en el ordenador podemos crear un repositorio y hacer el primer commit. Hoy veremos cómo usar git init, git add, git commit y git status.

10:27

4. Qué es el staging area

Hoy me centro en detalle en lo que comencé a explicar en el episodio anterior. En qué estados se pueden encontrar los archivos en nuestro repositorio de Git.

6:43

5. Cómo deshacer modificaciones de archivos

Cuando hacemos la modificación que no debimos nunca hacer, ¿cómo damos marcha atrás? En este vídeo os muestro cómo deshacer cambios locales y cómo sacar cambios del stage.

7:11

6. Cómo deshacer un commit con reset

Si lo que queremos deshacer es algo que ya hemos confirmado, podemos deshacer el commit de varias formas. Hoy nos centramos en el comando git reset.

7:08

7. Cómo revertir un commit con revert

Cómo revertir cambios de una forma no destructiva por medio del comando revert. Si has hecho un commit que has visto daba problemas, hoy te enseño cómo deshacer sus modificaciones.

5:41

8. Introducción a las ramas

Las ramas es un mecanismo que tienen los sistemas de control de versiones mediante el cual podemos mantener varias versiones del código de forma paralela sin interferencia.

5:46

9. Cómo crear y modificar ramas

Continuando con las explicaciones sobre ramas, hoy veremos cómo crear una rama con Git, y cómo modificar y eliminar ramas. Además, cómo usar checkout para cambiar de rama.

6:00

10. Commits bajo el workflow Feature Branch

Cuando trabajamos bajo el workflow Feature Branch, implementamos las características en ramas separadas de la principal. En este vídeo veremos cómo se pueden hacer commits en otras ramas.

6:26

11. Cómo fusionar ramas con merge

Una vez que hemos desarrollado la característica de un commit, tenemos que fusionarlo (merge) para que vuelva a la rama inicial. Vemos cómo hacer esto, esta vez mediante fast-forward y recursive.

8:49

12. Fusiones conflictivas

Cuando hacemos fusiones más avanzadas en Git corremos el riesgo de que se desate un conflicto. Hoy estudiamos qué ocurre si hacemos modificaciones al mismo archivo en varias ramas.

6:47

13. Cómo construir alias

Hagamos un interludio en el tutorial para explicar cómo usar alias, de modo que podamos escribir menos letras para ejecutar nuestros comandos con Git.

8:49

14. Más sobre conflictos

Todo un vídeo dedicado a conflictos. Os vuelvo a explicar cómo ocurren y cómo resolverlos. Como abortar un conflicto. Y mi experiencia personal en dónde suelen ocurrir conflictos en Git.

6:48

15. Etiquetas

Los sistemas de control de versiones ofrecen etiquetas para marcar commits significativos a los que podamos referirnos más tarde. En este vídeo te cuento cómo crear etiquetas en Git.

9:00

16. Tags anotados

Los tags anotados son tags que se comportan como objetos. Pueden tener descripción, datos de autor, de fecha y hora, firma... en este vídeo te explico sus diferencias y cómo crearlos.

6:32

17. Stash

El stash es una herramienta que tiene Git para limpiar el directorio de trabajo de cambios, preservándolos de modo que podamos recuperarlos más adelante.

5:15

18. Introducción a remotos

Alerta por videomonólogo. En este episodio os introduzco al concepto de remotos explicando cómo se comportan en Git y en qué se diferencian de los de un SCV centralizado.

5:44

19. Pusheando a un remoto

Crearemos un repositorio en GitLab y lo asociaremos a nuestro repositorio local con `git remote`. Luego enviaremos nuestro código a la nube usando `git push`.

5:47

20. Clonando y haciendo pull

Ahora que tenemos el código en un remoto vamos a ver cómo podemos acceder a él de cero usando clone y cómo podemos recibir commits de un remoto usando pull.

8:15

21. Fetch y pull rebases

Cómo obtener información sobre un remoto con fetch, y cómo los remotos no son más que ramas que se pueden fusionar. Además, qué ventajas aporta un pull-rebase frente a un pull-merge normal.

7:09

22. Rebase

El rebase es un comando que deja tocar el historial de commits de Git con distintos usos. Hoy os enseño cómo hacer un rebase en vez de un merge a la hora de integrar cambios.

5:44

23. Rebase interactivo

Para cerrar esta temporada, os hablo acerca del rebase interactivo, un comando útil para reescribir del todo el historial de Git: aplastar commits, cambiarlos de orden, modificar mensajes... ¡todo!

8:57

24. Master, main y otros nombres de rama

Arrancamos con un tema fresco. Hace ya un tiempo que se empezó a recomendar no usar "master" como nombre de la rama principal, por lo que hoy día Git tiene ajustes para cambiar el nombre de la rama, y también hay que estar pendiente de lo que se clona.

8:41

25. git switch

Con git switch podemos cambiar de rama. Un poco como con git checkout, pero sin usar git checkout.

9:34

26. git-restore

Con el comando git-restore se pueden deshacer modificaciones hechas a archivos. Como ya se podía hacer con git-checkout, pero sin utilizar un comando que vale para ocho cosas diferentes. Otros flags de restore que cuento hoy: --staged, --workdir, --source.

11:00

27. git-grep

git-grep es un comando que toda la vida ha estado ahí, pero que hace unas versiones fue mejorado para dotarle de más rendimiento, y ahora es un comando ideal para buscar código en un repositorio porque los resultados son rápidos.

10:47

28. Gitignore

El gitignore es un archivo en el que se declaran rutas a ignorar para que nunca se metan cuando se hace un git add, entre otras cosas. Tienes una lista de ejemplos de gitignore en https://github.com/github/gitignore.

9:20

29. El flag --patch

Con la opción --patch es posible que ciertos comandos como git-add, git-checkout o git-restore hagan sus cambios sobre trozos concretos de archivos en vez de sobre un archivo completo. Lo podemos usar para meter hunks concretos en un commit o para deshacer parcialmente el contenido de un archivo.

9:29

30. git-apply y parches en bruto (advanced)

Cómo exportar un diff para crear un archivo de parche, que podemos compartir y volver a aplicar más adelante usando el comando git-apply. Muchos proyectos de software libre siguen trabajando con parches como forma de compartir sus avances, porque no quieren dar el salto a GitLab y GitHub.

8:51

31. Merge octopus (advanced)

Merge octopus es un tipo de merge (el del pulpo) que se hace cuando se intenta hacer un merge de más de dos ramas a la vez. Es un tipo de merge que puede ser útil en casos en los cuales haya varias ramas a integrar, para hacerlo de un único esfuerzo, pero es un tipo de merge blando que no se lleva bien con los conflictos y que por lo tanto no siempre se puede usar.

11:54

32. Conventional commits

Conventional Commits, o Commits Convencionales, es un patrón de uso de repositorios Git en el que ponemos siempre un prefijo a todos los commits para indicar de qué tipo son, por ejemplo feat para las funciones nuevas, fix para los arreglos, o chore para indicar mejoras higiénicas en el repositorio. La spec completa está en https://www.conventionalcommits.org.

6:29

33. Merge and squash (GitLab / GitHub...)

Es común hoy en día que en proyectos con una organización detrás, el trabajo se delegue a interfaces web como GitHub o GitLab, donde se puede hacer la integración desde una interfaz gráfica que permite visualizar diffs o poner comentarios. Conocemos el botón Merge commit, el botón Rebase and merge, pero... ¿qué es un squash y qué consecuencias tiene pulsar ese botón?

6:44

34. git merge --squash

El botón squash de las interfaces web está bien, pero ¿cómo haríamos un squash desde la línea de comandos usando nuestro propio cliente de Git? El squash es un flag del comando git-merge, por lo que para hacer un squash tenemos que solicitar esta estrategia al realizar un merge.

7:40

35. git-bisect

git-bisect es un comando de diagnóstico muy potente que permite identificar en un log de Git el momento exacto en el que se introduce un bug (o ya puestos, lo que sea que estemos buscando). Podemos iniciar un bisect con `git bisect start`, y luego ir etiquetando commits con el sub-sub-comando "good" como "buenos", o con el sub-sub-comando "bad" como malos.

6:00

36. git-blame

git-blame es un comando de diagnóstico que analiza un archivo y te dice en qué commit, cuándo y quien, se modificó cada línea de un archivo, para poder identificar el commit concreto en el que se tomó ese cambio. Podemos usar el comando git-show para ver ese commit concreto y así entender el razonamiento detrás de ese cambio (si la descripción del commit está bien hecha, claro).