Una de las grandes ventajas del control de versiones con git es la flexibilidad para crear ramas, hacer commits y en general trabajar de manera ágil e independiente pero con la seguridad del repositorio. Sin embargo, a veces queremos integrar una rama en la que se ha hecho un desarrollo útil, pero cuya historia… digamos que no es la más limpia. En este asciinema hago en directo un rebase interactivo muy sencillito para ver el flujo de trabajo y las herramientas disponibles.

Una de las características más poderosas (y peligrosas!) de git es su capacidad para reescribir la historia. Hay quien no ve con buenos ojos esta técnica, y es cierto que hay muchas ocasiones en que es mejor no tocar la historia. Al fin y al cabo, todos cometemos errores, y no suele ser muy grave que queden registrados para siempre.

Pero hay ocasiones en las que esta técnica es necesaria, por cuestiones de seguridad, estilo, o mejor mantenibilidad del repositorio. En cualquier caso, conocer nuestras herramientas y sus capacidades siempre es bueno, y nos permite tener mejor juicio a la hora de decidir si es necesario usar las técnicas "peligrosas" en un momento dado.

Además, cuando uno trabaja en local (sin sincronizar con repositorios remotos), conocer estas técnicas nos permite hacer un desarrollo rápido y ágil, aunque un poco guarrete, para luego redibujar una historia que explique mejor los cambios y sus motivos. Esto no es sólo por estética, ni vanidad, sino que puede ayudar a otra persona a entender el trabajo que hemos hecho, lo cual es fundamental en proyectos con muchos desarrolladores a la hora de debuggear o integrar.

En ese papel me veía yo, como codirector de un TFG reciente, revisando el trabajo de los alumnos para hacer comentarios y correcciones, y luego integrar los commits en la rama común (master). En un momento dado, los alumnos hicieron una serie de contribuciones interesantes a un repositorio público (grafeno). Como todavía estaban aprendiendo, la historia no era la ideal, además de estar escrita en español, cuando el idioma de la librería en cuestión es el inglés.

Les sugerí que hicieran un rebase interactivo de los cambios para luego poder publicarlos en abierto, pero no era una tarea a la que se hubieran enfrentado antes. Como en ese momento no teníamos tiempo para reunirnos, decidí hacer este "vídeo" (no es un vídeo realmente, puedes leer más en asciinema) explicando la tarea. ¡Espero que os sirva!

  • La sesión está disponible aquí para descargar y ver en tu propia terminal.