Usar y mejorar tu historial de Git

¿Qué es Git?

Git es un Sistema de Control de Versión (VCS).

¿Qué es Git?

Git se [parece] más a un sistema de archivos miniatura con algunas herramientas tremendamente poderosas desarrolladas sobre él, que a un VCS [(sistema de control de versión)].

Scott Chacon, Pro Git (traducción en español)

¿Por qué Git?

Después de confirmar [un commit] en Git es muy difícil perderla, especialmente si envías [esos cambios] a otro repositorio con regularidad.

Scott Chacon, Pro Git (traducción en español)

Además

📜 Historial que usar

🌳 Ramas

Historial de Git

Pequeños commits (modificaciones) con mensajes informativos.

Una línea de codigo misteriosa

un script con una línea de codigo misteriosa 'x <- x - 1'

git blame

diagrama simplificado de Git blame : para cada lína de un script, a la izquierda se ve quién la modificó, cuando, con cual mensaje de commit.

Git blame : haz un clic en el commit…

Git blame : haz un clic en el commit…

“Añadir un montón de archivos antes del almuerzo 🍝

Muestra 145 ficheros modificados con 2.624 addiciones y 2.209 supresiones.

Git blame : haz un clic en el commit…

“fix: adaptar el código al índice 0 de la herramienta”

Visualización de 2 ficheros modificados con 3 addiciones y 2 supresiones.

Git blame : ejemplo

En pkgdown

Una mala idea hace 7 commits

¡Oh no, esa idea de hace 7 commits está mal! Deberíamos…

  • Borrar la modificación manualmente ;

  • Revertir (“Revert”) el commit que añadió la modificación?

Git revert

Esto sólo funciona bien si el commit es pequeño.

Git revert : práctica !

Recordatorio de nuestra primera sesión de Git. 😉

10 minutos

withr::local_language("es")
dir  <- withr::local_tempdir()
saperlipopette::exo_undo_commit(dir)

Tú haciendo algo hace tres días

un montón de guiones, con un emoji de una cara feliz con gafas de sol.

Tú haciendo lo mismo hoy

un montón de guiones, con un emoji de una cara sollozando.

Git bisect : historial de los commits

una serie de emoji, el primero una cara fría, luego caras durmiendo, luego una cara sollozando.

Git bisect : explora los commits de la mejor manera posible

una serie de emoji, el primero una cara fría, luego caras durmiendo, luego una cara sollozando. una flecha sobre un rostro dormido.

Git bisect : explora los commits de la mejor manera posible

todas las caras hasta la flecha son ahora caras geniales.

Git bisect : explora los commits de la mejor manera posible

flecha sobre otra cara dormida

Git bisect : explora los commits de la mejor manera posible

todas las caras después de la flecha ahora están sollozando

Git bisect : explora los commits de la mejor manera posible

flecha en la última cara dormida

Git bisect : explora los commits de la mejor manera posible

última cara dormida ahora sollozando

Resultado de Git bisect : un commit !

Resultado de Git bisect : un commit !

“Añadir un montón de archivos antes del almuerzo 🍝

Muestra 145 ficheros modificados con 2.624 addiciones y 2.209 supresiones.

Résultat de Git bisect : un commit !

“refactor: empieza a usar YAML”

Visualización de 2 ficheros modificados con 3 addiciones y 2 supresiones.

Git bisect : práctica !

15 minutos

withr::local_language("es")
dir  <- withr::local_tempdir()
saperlipopette::exo_bisect(dir)

Historial de Git

““there’s no need for everyone to see the mistakes you made along the way””

traducción: “no hay necesidad de que todo el mundo vea los errores que cometiste en el camino”.

Mike McQuaid, Git in practice

Descanso 😮‍💨

5 minutos

Cómo obtener un bueno historial de Git

Otra dimensión de tu trabajo.

Trabajar en ramas

“La repetida enmienda”™️ :
git commit --amend

¿Qué es git commit --amend?

withr::local_language("es")
dir  <- withr::local_tempdir()
saperlipopette::exo_one_small_change(dir)

“La repetida enmienda”™️ :
git commit --amend

https://happygitwithr.com/repeated-amend

  • Primera parte del trabajo, git commit -m "feat: ajoute truc cool"

  • Segunda parte del trabajo, git commit --amend --no-edit

  • Hecho! git push

“La repetida enmienda”™️ :
git commit --amend

  • git checkout -b 'feature-cool'

  • Primera parte del trabajo, git commit -m "feat: ajoute truc cool", git push

  • Segunda parte del trabajo, git commit --amend --no-edit, git push -f

  • Hecho! git push -f

“Squash and merge” : haz un clic en el botón corecto de GitHub/GitLab.

una rama principal con varios commits, una rama de funcionalidad con muchos commits.

“Squash and merge” : haz un clic en el botón corecto de GitHub/GitLab.

una rama principal con varios commits, incluido un commit para una nueva función

“Squash and merge” : haz un clic en el botón corecto de GitHub/GitLab.

Ejemplo

“Empezar de cero”

  • git reset --mixed Cambios en los archivos pero no en el historial de Git.

  • git add (--patch) Buenos comentarios, en retrospectiva.

git add --patch: práctica

10 minutos

withr::local_language("es")
dir  <- withr::local_tempdir()
saperlipopette::exo_split_changes(dir)

Descanso 😮‍💨

5 minutos

“Empezar de cero”: práctica

15 minutos

withr::local_language("es")
dir  <- withr::local_tempdir()
saperlipopette::exo_reset(dir)

“Mezcla y combina tus commits”: práctica

git rebase -i

15 minutos

withr::local_language("es")
dir  <- withr::local_tempdir()
saperlipopette::exo_rebase_i(dir)

“Mezcla y combina tus commits”

Recursos en inglés sobre git rebase

Julia Evans’ rules for rebasing

Julia Evans’ post “git rebase: what can go wrong?”

Porqué tener pequeños commits informativos

Mejor historial, en particular para

  • git blame

  • git bisect

  • git revert

¿Cómo crear mejors commits?

No tiene por qué hacerlo bien a la primera

  • La repetida enmienda ™️

  • “Squash and merge” PR

  • Reempezar de cero de cero

  • Mezcla y combina tus commits

¿Qué herramientas para Git ?

  • La terminal : no cambia, y aprendes las palabras.

  • RStudio IDE

  • Positron IDE, con la extensión GitLens

  • Otras IDE

  • GitHub Desktop

¡Practique con total seguridad con los parques de juegos de {saperlipopette} !

Ressources Git pour les débutants (Anglais)