Chuck's Academy

Git Branching y Merging

Rebase en Git: Conceptos y Usos

Rebase en Git: Conceptos y Usos

El rebase en Git es una operación poderosa que permite reescribir el historial de commits de una rama. A diferencia del merge, que combina cambios manteniendo los commits originales, el rebase aplica los commits de una rama sobre otra, creando un historial más lineal y limpio.

¿Qué es el Rebase?

El rebase tiene como objetivo mover o reasignar la base de una rama. Esencialmente, "reproduce" una serie de commits en un nuevo punto de partida.

Ejemplo:

Supongamos que tenemos la siguiente situación:

Si haces un rebase de feature sobre main:

bash

El resultado será:

Comando Básico de Rebase

Para realizar un rebase:

bash

Ejemplo:

bash

Esto reprocesa los commits de feature-xyz sobre main.

Tipos de Rebase

Rebase Interactivo

El rebase interactivo (rebase -i) permite una mayor personalización y control sobre la reescritura de commits. Puedes editar, combinar, reordenar y eliminar commits.

Para iniciar un rebase interactivo:

bash

Ejemplo:

bash

Esto iniciará un rebase interactivo que incluye los últimos tres commits.

Durante el rebase interactivo, Git abrirá un editor de texto con una lista de commits y comandos que puedes usar para modificar el historial.

Comandos Comunes en Rebase Interactivo:

  • pick - Usa el commit.
  • reword - Edita el mensaje del commit.
  • edit - Hace una pausa para editar el commit.
  • squash - Combina el commit con el anterior.
  • fixup - Similar a squash pero descarta el mensaje del commit.
  • drop - Elimina el commit.

Resolución de Conflictos durante el Rebase

Al igual que en una fusión, pueden surgir conflictos durante un rebase. Git pausará el proceso y permitirá que resuelvas los conflictos manualmente.

Pasos para Resolver Conflictos durante el Rebase:

  1. Identifica los conflictos: Git marcará los archivos en conflicto.
  2. Resuelve los conflictos: Edita los archivos en conflicto manualmente.
  3. Marca los archivos resueltos:
    bash
  4. Continúa con el rebase:
    bash

Si decides no proseguir con el rebase:

bash

Comparación entre Merge y Rebase

Merge:

  • Preserva el historial de commits original.
  • Crea commits de fusión.
  • Útil para integrar grandes cambios y colaborar en equipo.

Rebase:

  • Historial lineal y más limpio.
  • No crea commits de fusión.
  • Útil para mantener un historial simple y ordenado.

Cuándo Usar Rebase

  1. Limpieza del Historial: Mantiene un historial más legible y limpio.
  2. Rebasing de Características Locales: Antes de publicar una rama de característica para mantener un historial más coherente.
  3. Actualizar una Rama: Traer cambios de la rama principal sin introducir commits de fusión.

Buenas Prácticas con Rebase

  • Evita el rebase en ramas públicas: Puede causar problemas de colaboración.
  • Usa rebase para tu trabajo local: Mantén tu historial limpio antes de compartir.

Resumen

  1. Concepto del Rebase: Mueve commits de una rama sobre otra.
  2. Comando Básico: git rebase <rama-base>
  3. Rebase Interactivo: git rebase -i <commit-base>
  4. Resolución de Conflictos: Similar a la fusión, pero uses git rebase --continue
  5. Comparación con Merge: Historial linear vs. preservación de commits originales.
  6. Buenas Prácticas: Usar principalmente en trabajo local y evitar en ramas públicas.

El rebase ofrece una manera efectiva de mantener un historial limpio y organizado, esencial en entornos de desarrollo colaborativos. En el siguiente capítulo, exploraremos cuándo usar fusión versus rebase.


Pregúntame lo que sea