lección 3

Crear, cambiar y fusionar branches

Manos a la obra: git branch, git switch, git merge. Aprende a abrir universos paralelos y a fusionarlos de vuelta.

55 min

En la lección anterior entendiste POR QUÉ necesitas branches. Ahora vas a aprender a crearlas, moverte entre ellas y fusionarlas. Prepara tu terminal porque esto es 100% práctico. Vamos a crear un proyecto Python pequeño, abrir branches, hacer cambios en cada una y fusionarlas. Al final de esta lección, manejar branches será tan natural como hacer un commit.

Pero antes, un matiz importante: Git tiene dos comandos para cambiar de branch. El antiguo git checkout (que hace 47 cosas distintas y confunde a todo el mundo) y el moderno git switch (que solo cambia de branch y nada más). Vamos a usar git switch porque es más claro, pero te mostraré git checkout también porque lo verás en tutoriales antiguos y en el trabajo.

### Preparación: un proyecto para experimentar

Primero, vamos a crear un mini proyecto Python para tener algo con lo que trabajar. Abre tu terminal y escribe estos comandos:

1# 🟦 Windows (PowerShell) y 🍎 Mac (Terminal)
2# Los comandos de Git son idénticos en ambos sistemas
3
4mkdir mi-pipeline
5cd mi-pipeline
6git init

Crear un repo nuevo para practicar branches

Ahora creamos un archivo Python que será nuestro "pipeline":

1# pipeline.py - Nuestro pipeline de datos básico
2
3def extraer_datos():
4 """Simula extraer datos de una fuente."""
5 datos = [
6 {"producto": "Laptop", "precio": 999, "cantidad": 5},
7 {"producto": "Mouse", "precio": 29, "cantidad": 50},
8 {"producto": "Teclado", "precio": 79, "cantidad": 30},
9 ]
10 return datos
11
12def calcular_total(datos):
13 """Calcula el total de ventas."""
14 total = sum(item["precio"] * item["cantidad"] for item in datos)
15 return total
16
17if __name__ == "__main__":
18 datos = extraer_datos()
19 total = calcular_total(datos)
20 print(f"Total de ventas: ${total:,.2f}")

pipeline.py — nuestro proyecto base

1# Guardamos el estado inicial
2git add pipeline.py
3git commit -m "feat: pipeline básico con extracción y cálculo"

Primer commit en main

Perfecto. Ahora tenemos un repo con un commit en main. Es el momento de crear nuestro primer universo paralelo.

### git branch: ver y crear branches

El comando git branch sin argumentos te muestra todas las branches que existen y marca con un * la branch donde estás ahora mismo:

1git branch
2# Salida:
3# * main
4
5# El asterisco (*) indica dónde estás.
6# Ahora solo existe main.

Ver las branches existentes

Para crear una nueva branch, usa git branch seguido del nombre:

1# Crear una branch (pero NO te mueves a ella)
2git branch feature/agregar-iva
3
4# Verificar
5git branch
6# Salida:
7# feature/agregar-iva
8# * main
9#
10# La branch existe, pero sigues en main (el asterisco)

Crear una branch nueva

Error clásico: crear una branch con git branch y pensar que ya estás en ella. git branch SOLO crea la branch — no te mueve. Necesitas un paso adicional para "entrar" en tu universo paralelo.

### git switch: moverse entre universos

Para cambiar a otra branch (entrar en ese universo paralelo), usa git switch:

1# Moverte a la branch que creaste
2git switch feature/agregar-iva
3
4# Verificar
5git branch
6# Salida:
7# * feature/agregar-iva
8# main
9#
10# ¡Ahora el asterisco está en tu feature branch!
11
12# ATAJO: crear y moverte en un solo paso
13git switch -c feature/otra-cosa
14# -c = create + switch (lo más usado en la práctica)

Cambiar de branch con git switch

El atajo git switch -c nombre es lo que usarás el 99% del tiempo. Crea la branch y te mueve a ella en un solo comando. Es como decir "abre un portal a un nuevo universo y llévame allí".

Si ves tutoriales antiguos con git checkout -b nombre, es exactamente lo mismo que git switch -c nombre. Git añadió switch en 2019 para simplificar las cosas. Usa switch — es más moderno y claro. Pero no te asustes si en el trabajo ves checkout por todas partes.

### Trabajar en tu branch: hacer cambios y commits

Ahora que estás en feature/agregar-iva, todo lo que hagas (editar archivos, crear archivos, hacer commits) solo existe en esta branch. Main no se entera de nada. Vamos a modificar nuestro pipeline para añadir IVA:

1# pipeline.py - MODIFICADO en la branch feature/agregar-iva
2
3def extraer_datos():
4 """Simula extraer datos de una fuente."""
5 datos = [
6 {"producto": "Laptop", "precio": 999, "cantidad": 5},
7 {"producto": "Mouse", "precio": 29, "cantidad": 50},
8 {"producto": "Teclado", "precio": 79, "cantidad": 30},
9 ]
10 return datos
11
12def calcular_iva(precio, tasa=0.21):
13 """Calcula el IVA de un precio."""
14 return precio * tasa
15
16def calcular_total(datos, con_iva=True):
17 """Calcula el total de ventas, opcionalmente con IVA."""
18 total = sum(item["precio"] * item["cantidad"] for item in datos)
19 if con_iva:
20 total += calcular_iva(total)
21 return total
22
23if __name__ == "__main__":
24 datos = extraer_datos()
25 total = calcular_total(datos)
26 print(f"Total de ventas (con IVA): ${total:,.2f}")

pipeline.py modificado en feature/agregar-iva

1# Commit en la feature branch
2git add pipeline.py
3git commit -m "feat: añadir cálculo de IVA al total"
4
5# Verificar el historial
6git log --oneline
7# Salida:
8# a1b2c3d feat: añadir cálculo de IVA al total
9# x9y8z7w feat: pipeline básico con extracción y cálculo

Commit en tu feature branch

Ahora viene la magia. Vuelve a main y mira pipeline.py:

1# Vuelve a main
2git switch main
3
4# Mira el archivo
5# 🟦 Windows (PowerShell):
6Get-Content pipeline.py
7
8# 🍎 Mac (Terminal):
9cat pipeline.py
10
11# ¡¡NO tiene la función calcular_iva!! Está como antes.
12# Main no se enteró de tus cambios. Universo paralelo intacto.

Main sigue exactamente como estaba

### git merge: fusionar universos

Tu feature está lista. La función de IVA funciona, la has probado, estás contento. Es hora de traer esos cambios a main — fusionar el universo paralelo con la realidad. Para eso existe git merge.

La regla es: te colocas en la branch que RECIBE los cambios (main) y le dices "absorbe los cambios de esta otra branch". Es como abrir un portal y decir "trae todo lo bueno de ese universo al mío":

1# 1. Asegúrate de estar en main (la rama que RECIBE)
2git switch main
3
4# 2. Fusiona tu feature branch
5git merge feature/agregar-iva
6# Salida:
7# Updating x9y8z7w..a1b2c3d
8# Fast-forward
9# pipeline.py | 10 +++++++++-
10# 1 file changed, 9 insertions(+), 1 deletion(-)
11
12# 3. Verifica: ahora main TIENE la función de IVA
13git log --oneline
14# a1b2c3d feat: añadir cálculo de IVA al total
15# x9y8z7w feat: pipeline básico con extracción y cálculo

Fusionar la feature branch en main

### Fast-forward vs merge commit: dos tipos de fusión

Git tiene dos formas de fusionar branches, y es importante entender la diferencia:

Fast-forward: ocurre cuando main NO ha recibido cambios mientras trabajabas en tu branch. Git simplemente "avanza" el puntero de main hasta donde está tu branch. Es como si main hubiera estado parado esperándote — no hay nada que reconciliar. Es la fusión más limpia y simple.

Merge commit: ocurre cuando main SÍ recibió cambios mientras tú trabajabas (otro compañero fusionó algo). Git necesita crear un commit especial que "une" ambas líneas temporales. Este commit tiene dos padres: el último commit de main y el último de tu branch. Es como cuando dos ríos se unen — se crea un punto de confluencia.

Fast-forward avanza el puntero; merge commit une dos historias

### Borrar branches: limpiar después de fusionar

Una vez que fusionaste tu branch con main, esa branch ya cumplió su propósito. Es como un andamio: lo necesitas mientras construyes, pero cuando terminas lo retiras. Borrar branches fusionadas mantiene tu repo limpio:

1# Borrar una branch que ya fusionaste
2git branch -d feature/agregar-iva
3# Salida: Deleted branch feature/agregar-iva (was a1b2c3d).
4
5# Verificar
6git branch
7# * main
8# (limpio y ordenado)
9
10# Si intentas borrar una branch NO fusionada, Git te protege:
11git branch -d feature/algo-sin-fusionar
12# error: The branch 'feature/algo-sin-fusionar' is not fully merged.
13# If you are sure you want to delete it, run 'git branch -D ...'
14
15# -d = delete seguro (solo si ya fusionaste)
16# -D = delete forzado (borra aunque no esté fusionada — cuidado)

Limpiar branches después del merge

Consejo de senior: al final de cada semana, revisa tus branches locales con git branch y borra las que ya fusionaste. He visto repos con 200+ branches locales sin borrar — un cementerio de experimentos olvidados que confunde a todos.

### El flujo completo en acción

Vamos a hacer el flujo completo una vez más, de principio a fin, para que quede grabado. Imagina que te piden añadir un descuento del 10% para pedidos grandes:

1# 1. Crear branch y moverte (un solo comando)
2git switch -c feature/descuento-mayorista
3
4# 2. Hacer tus cambios (editar pipeline.py)
5# ... añades función aplicar_descuento() ...
6
7# 3. Commit
8git add pipeline.py
9git commit -m "feat: descuento 10% para pedidos > 10 unidades"
10
11# 4. Volver a main
12git switch main
13
14# 5. Fusionar
15git merge feature/descuento-mayorista
16
17# 6. Borrar la branch (ya no la necesitas)
18git branch -d feature/descuento-mayorista
19
20# ¡Hecho! De principio a fin en 6 pasos.

El flujo completo: crear → trabajar → fusionar → limpiar

### git log --graph: visualizar el árbol de branches

Cuando empiezas a tener varias branches y merges, el historial deja de ser una línea recta. Git tiene una forma de verlo como un gráfico en la terminal:

1# Ver el historial como un gráfico
2git log --oneline --graph --all
3
4# Salida de ejemplo con merge commits:
5# * f4e5d6c Merge branch 'feature/descuento-mayorista'
6# |\
7# | * b3c4d5e feat: descuento 10% para pedidos > 10 unidades
8# |/
9# * a1b2c3d feat: añadir cálculo de IVA al total
10# * x9y8z7w feat: pipeline básico con extracción y cálculo

Visualizar branches y merges en la terminal

Si haces git switch a otra branch con cambios sin commitear, Git puede quejarse. Opciones: 1) commitea antes de cambiar, 2) usa git stash para "guardar temporalmente" tus cambios, o 3) descarta los cambios con git restore. Lo más seguro: siempre commitea o stashea antes de cambiar de branch.

## ejercicios

[01]

Crea tu primera feature branch

Escribe la secuencia de comandos Git para: 1) crear una branch llamada feature/filtrar-productos, 2) moverte a ella, 3) verificar que estás ahí. Usa tanto el método de dos pasos como el atajo de un paso.

Cargando editor...
[02]

Flujo completo: branch → cambios → merge

Escribe la secuencia completa de comandos para: crear una branch feature/agregar-logging, añadir un archivo logger.py, commitearlo, volver a main, fusionar y borrar la branch.

Cargando editor...
[03]

Malabarismo: trabajar con múltiples branches

Tienes 3 tareas simultáneas. Escribe los comandos para crear 3 branches desde main, hacer un commit en cada una, y luego fusionar las 3 en main en orden.

Cargando editor...

Regístrate para guardar tu progreso.

## comentarios

Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.

Inicia sesión para comentar y responder.

cargando comentarios...