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.

Cuando trabajamos con Git, mantener un historial limpio y comprensible es fundamental para facilitar la colaboración y el seguimiento de los cambios. Una herramienta poderosa para lograr esto es el comando git rebase, que nos permite integrar cambios de manera ordenada y evitar commits innecesarios que solo ensucian el historial.

Imaginemos que empezamos a trabajar en una nueva característica y creamos una rama llamada feature-caracteristica. En esta rama hacemos varios commits, por ejemplo, aplicaCambioA y aplicaCambioB. Mientras tanto, en la rama master se realiza otro cambio importante, digamos aplicaCambioC, para corregir un error urgente. Luego, volvemos a la rama de la característica y añadimos otro commit, aplicaCambioD.

Si intentamos fusionar la rama feature-caracteristica en master con un git merge, Git realizará una fusión recursiva que generará un commit adicional de merge. Este commit extra no aporta valor real y solo complica el historial, haciendo que sea más difícil seguir la evolución del proyecto.

Aquí es donde git rebase nos ayuda. Al ejecutar git rebase master desde la rama feature-caracteristica, Git reescribe el historial de esta rama para que sus commits aparezcan como si se hubieran creado a partir del último commit de master. Esto aplasta el historial, eliminando los nodos de merge y dejando una secuencia lineal de commits. Así, cuando finalmente hagamos el merge a master, Git podrá hacerlo mediante un fast-forward, sin crear commits adicionales.

Es importante tener en cuenta que git rebase es un comando que altera el historial de commits. Esto significa que los hashes de los commits cambian, y si ya hemos compartido esos commits con otros colaboradores (por ejemplo, si los hemos pusheado a un repositorio remoto), reescribir el historial puede causar conflictos y problemas de sincronización. Por eso, debemos usar rebase con precaución y preferiblemente solo en ramas locales o en commits que no hayan sido compartidos.

Una de las ventajas de usar merge es que mantiene la trazabilidad completa del desarrollo, mostrando claramente de dónde provienen los cambios y cómo se integraron las ramas. Esto puede ser útil para entender el contexto histórico del proyecto. Sin embargo, para quienes prefieren un historial más limpio y lineal, sin los nudos que generan los merges, rebase es una opción más atractiva.

Además, git rebase tiene un modo interactivo que permite combinar varios commits en uno solo, lo que es ideal para limpiar el historial antes de compartirlo. Por ejemplo, si hemos hecho varios commits pequeños y queremos presentarlos como un único cambio coherente, el rebase interactivo nos facilita esa tarea.

En definitiva, la elección entre merge y rebase depende del estilo de trabajo del equipo y de las preferencias personales. Mientras algunos valoran la claridad del grafo completo de merges, otros prefieren la simplicidad de un historial lineal. Lo importante es entender las implicaciones de cada método y usarlos de manera consciente para mantener un repositorio ordenado y colaborativo.

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