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 sistemas34mkdir mi-pipeline5cd mi-pipeline6git 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ásico23def 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 datos1112def calcular_total(datos):13 """Calcula el total de ventas."""14 total = sum(item["precio"] * item["cantidad"] for item in datos)15 return total1617if __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 inicial2git add pipeline.py3git 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 branch2# Salida:3# * main45# 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-iva34# Verificar5git branch6# Salida:7# feature/agregar-iva8# * main9#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 creaste2git switch feature/agregar-iva34# Verificar5git branch6# Salida:7# * feature/agregar-iva8# main9#10# ¡Ahora el asterisco está en tu feature branch!1112# ATAJO: crear y moverte en un solo paso13git switch -c feature/otra-cosa14# -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-iva23def 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 datos1112def calcular_iva(precio, tasa=0.21):13 """Calcula el IVA de un precio."""14 return precio * tasa1516def 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 total2223if __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 branch2git add pipeline.py3git commit -m "feat: añadir cálculo de IVA al total"45# Verificar el historial6git log --oneline7# Salida:8# a1b2c3d feat: añadir cálculo de IVA al total9# 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 main2git switch main34# Mira el archivo5# 🟦 Windows (PowerShell):6Get-Content pipeline.py78# 🍎 Mac (Terminal):9cat pipeline.py1011# ¡¡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 main34# 2. Fusiona tu feature branch5git merge feature/agregar-iva6# Salida:7# Updating x9y8z7w..a1b2c3d8# Fast-forward9# pipeline.py | 10 +++++++++-10# 1 file changed, 9 insertions(+), 1 deletion(-)1112# 3. Verifica: ahora main TIENE la función de IVA13git log --oneline14# a1b2c3d feat: añadir cálculo de IVA al total15# 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.
### 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 fusionaste2git branch -d feature/agregar-iva3# Salida: Deleted branch feature/agregar-iva (was a1b2c3d).45# Verificar6git branch7# * main8# (limpio y ordenado)910# Si intentas borrar una branch NO fusionada, Git te protege:11git branch -d feature/algo-sin-fusionar12# 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 ...'1415# -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-mayorista34# 2. Hacer tus cambios (editar pipeline.py)5# ... añades función aplicar_descuento() ...67# 3. Commit8git add pipeline.py9git commit -m "feat: descuento 10% para pedidos > 10 unidades"1011# 4. Volver a main12git switch main1314# 5. Fusionar15git merge feature/descuento-mayorista1617# 6. Borrar la branch (ya no la necesitas)18git branch -d feature/descuento-mayorista1920# ¡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áfico2git log --oneline --graph --all34# Salida de ejemplo con merge commits:5# * f4e5d6c Merge branch 'feature/descuento-mayorista'6# |\7# | * b3c4d5e feat: descuento 10% para pedidos > 10 unidades8# |/9# * a1b2c3d feat: añadir cálculo de IVA al total10# * 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
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.
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.
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.
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...