Rebase con git rebase


Vamos a ver git rebase, un comando de Git que reaplica los commits de una rama sobre otra rama base, reescribiendo su historial

Rebase con git rebase
oscar Escrito por oscar 27 April 2025 75 0

Vamos a ver git rebase, un comando de Git que reaplica los commits de una rama sobre otra rama base, reescribiendo su historial.

Observemos a continuación la documentación oficial donde se obtuvo información para realizar el empelo que mencionamos mas adelante:

🧠 ¿Qué significa eso?

Imagina que tienes dos ramas:

  • main: la rama principal.
  • feature: una rama donde has trabajado en algo nuevo.

Ambas ramas comparten un punto en común en el pasado, pero main ha recibido nuevos cambios desde que creaste feature.

git rebase main en la rama feature:

  • Toma los commits únicos de feature.
  • Los mueve como si se hubieran creado después de los commits nuevos en main.

📌 Esto hace que el historial sea más limpio y lineal, en lugar de ramificarse con muchos "merge commits".

🔥 ¿Qué diferencia hay entre git merge y git rebase?

Concepto git merge git rebase
Qué hace Crea un nuevo commit de fusión (merge commit) Mueve tus commits encima de otra rama
Historia Mantiene la historia real (más ramificada) Reescribe historia (más lineal)
Commit extra Sí, crea un commit de merge No, reordena commits existentes
Ideal para Mantener trazabilidad del trabajo en equipo Tener una historia limpia en ramas locales

🧪 Ejemplo práctico: Rebase

1️⃣ Crea un nuevo repositorio

Primero creamos una carpeta, esta la llamaremos de la siguiente forma pero el nombre puede ser diferente:

mkdir rebase-ejemplo && cd rebase-ejemplo

Creamos un proyecto git de la siguiente forma:

git init

Nota: realizamos la configuración del usuario y correo de git para poder hacer los commits

2️⃣ Crea el archivo inicial y haz el primer commit como se vio a detalle en confirmar cambios de git

echo "Línea original" > archivo.txt
git add archivo.txt
git commit -m "Commit inicial en main"

Respuesta 

[master (root-commit) e077c3a] Commit inicial en main
 1 file changed, 1 insertion(+)
 create mode 100644 archivo.txt

3️⃣ Crea una nueva rama llamada feature de main

git checkout -b feature

Agrega una línea nueva:

echo "Línea desde feature" >> archivo.txt
git commit -am "Agrega línea desde feature"

Respuesta 

[feature 07d9ffb] Agrega línea desde feature
 1 file changed, 1 insertion(+)

 4️⃣ Vuelve a main y haz un cambio

git checkout main
echo "Línea desde main" >> archivo.txt
git commit -am "Agrega línea desde main"

Con lo anterior debemos haber creado lo siguiente:

main:    A - - - B
          \
feature:   C
  • A: Commit inicial en main
  • B: "Agrega línea desde main"
  • C: "Agrega línea desde feature" (creado desde A antes de que B existiera)

5️⃣ Ahora rebasa feature sobre main

Para hacer este paso debemos asegurarnos de estar en la rama reature, ya que vamos a pasa los commits de main -> reature

git checkout feature
git rebase main

🔍 ¿Qué pasó aquí?

main:    A---B
                 \
feature (rebase):  C'

Git movió tu commit de feature para que venga después del commit más reciente de main.

  • C': Es una nueva versión del commit C, pero ahora aparece como si se hubiera creado después de B.
  • Git reescribió el historial para que el commit de feature esté sobre la versión más actual de main.

El archivo ahora tendrá ambas líneas (de main y de feature), y el historial es lineal.

⚡ Cuándo usar merge vs rebase

Si querés... Usá...
Mantener registro de cómo evolucionó el trabajo (historial real) merge
Tener un historial limpio y lineal rebase

⚠️ Advertencias sobre rebase

  • Nunca hagas rebase a commits que ya enviaste a un repositorio compartido (push) si otras personas trabajan en ellos.
    • Cambiás la historia y podrías romper el trabajo de los demás.
  • Usalo con confianza en tu trabajo local antes de hacer push.

🎯 En resumen

  • git merge: Une ramas, mantiene la historia como pasó realmente.
  • git rebase: Reescribe historia para que parezca más limpia y ordenada.

Comentario

Debe aceptar antes de enviar