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!

Cuando trabajamos con Git, a menudo necesitamos ir más allá de las operaciones básicas para tener un control más fino sobre nuestro historial de commits. Para eso, contamos con una herramienta muy poderosa: el rebase interactivo. Este comando nos permite modificar el historial de nuestro repositorio local de forma personalizada, cambiando el orden de los commits, editando sus mensajes o combinando varios en uno solo.

Antes de entrar en materia, es fundamental recordar una regla de oro: nunca debemos usar rebase interactivo sobre commits que ya hayamos compartido o pusheado a un repositorio remoto. Al modificar el historial, cambiamos los hashes de los commits y, por tanto, alteramos el grafo del repositorio. Esto puede causar conflictos y problemas para otros colaboradores. Por eso, siempre trabajaremos con commits locales, por ejemplo, para limpiar mensajes o reducir el número de commits antes de compartir nuestro trabajo.

Para iniciar un rebase interactivo, primero identificamos cuántos commits queremos modificar. Supongamos que tenemos cuatro commits recientes con cambios etiquetados como A, B, C y D, y queremos combinarlos en uno solo. Ejecutamos el comando:

git rebase -i HEAD~4

Esto abrirá un editor de texto, generalmente Vim, con una lista de los últimos cuatro commits y una serie de comandos que podemos aplicar a cada uno. Aquí es donde empieza la personalización. Los comandos más comunes que podemos usar son:

  • pick: dejar el commit tal cual está.
  • reword: cambiar el mensaje del commit.
  • edit: modificar el contenido del commit.
  • squash: combinar el commit con el anterior, fusionando sus cambios y mensajes.
  • fixup: similar a squash, pero descarta el mensaje del commit que se aplasta.

Por ejemplo, si queremos cambiar el orden de los commits, simplemente reordenamos las líneas en el editor y guardamos. Git aplicará los commits en el nuevo orden, aunque es importante saber que la fecha de los commits no cambia, lo que puede resultar en un historial con fechas que no siguen el orden visual.

Para combinar varios commits en uno solo, usamos pick en el primer commit que queremos conservar y squash o fixup en los siguientes que deseamos fusionar. Así, si queremos que los commits B, C y D se unan al commit A, dejamos la línea de A con pick y cambiamos las otras a squash. Al guardar, Git nos pedirá un mensaje para el nuevo commit combinado, que podemos editar para que sea claro y descriptivo.

Este proceso nos permite limpiar y organizar nuestro historial antes de compartirlo, evitando mensajes confusos o demasiados commits pequeños que dificultan la lectura del historial.

Aunque el rebase interactivo es muy potente, su interfaz en línea de comandos puede resultar poco amigable para algunos. En esos casos, puede ser útil recurrir a herramientas gráficas que faciliten la visualización y manipulación de los commits.

Para profundizar más en las posibilidades del rebase interactivo y otros comandos avanzados de Git, la documentación oficial en GitBook es un recurso excelente y gratuito. Allí encontraremos detalles adicionales y ejemplos que nos ayudarán a dominar esta herramienta y mantener nuestro repositorio limpio y bien organizado.

Lista de reproducción
  1. 1
    ¿Qué es Git?
    4 minutos
  2. 2
    Cómo instalar Git
    9 minutos
  3. 3
    Creando tu primer commit
    9 minutos
  4. 4
    Qué es el staging area
    10 minutos
  5. 5
    Cómo deshacer modificaciones de archivos
    7 minutos
  6. 6
    Cómo deshacer un commit con reset
    7 minutos
  7. 7
    Cómo revertir un commit con revert
    7 minutos
  8. 8
    Introducción a las ramas
    6 minutos
  9. 9
    Cómo crear y modificar ramas
    6 minutos
  10. 10
    Commits bajo el workflow Feature Branch
    6 minutos
  11. 11
    Cómo fusionar ramas con merge
    6 minutos
  12. 12
    Fusiones conflictivas
    9 minutos
  13. 13
    Cómo construir alias
    7 minutos
  14. 14
    Más sobre conflictos
    9 minutos
  15. 15
    Etiquetas
    7 minutos
  16. 16
    Tags anotados
    9 minutos
  17. 17
    git stash: esconder cambios
    6 minutos
  18. 18
    Introducción a remotos
    5 minutos
  19. 19
    Pusheando a un remoto
    6 minutos
  20. 20
    Clonando y haciendo pull
    6 minutos
  21. 21
    Fetch y pull rebases
    8 minutos
  22. 22
    Rebase
    7 minutos
  23. 23
    Rebase interactivo
    6 minutos
  24. 24
    Master, main y otros nombres de rama
    9 minutos
  25. 25
    git switch
    9 minutos
  26. 26
    git-restore
    10 minutos
  27. 27
    git-grep
    11 minutos
  28. 28
    Gitignore
    11 minutos
  29. 29
    El flag --patch
    9 minutos
  30. 30
    git-apply y parches en bruto (advanced)
    9 minutos
  31. 31
    Merge octopus (advanced)
    9 minutos
  32. 32
    Conventional commits
    12 minutos
  33. 33
    Merge and squash (GitLab / GitHub...)
    6 minutos
  34. 34
    git merge --squash
    7 minutos
  35. 35
    git-bisect
    8 minutos
  36. 36
    git-blame
    6 minutos
  37. 37
    git-reflog
    10 minutos
  38. 38
    Git para la Bash
    11 minutos
  39. 39
    Submódulos (parte 1)
    7 minutos
  40. 40
    Submódulos (parte 2)
    10 minutos
  41. 41
    Otros clientes Git (último episodio)
    9 minutos