Las ramas (branches) son una de las características más potentes de Git. Permiten desarrollar funcionalidades de forma aislada, experimentar sin riesgo y colaborar con varios desarrolladores en paralelo.
Trabajar con ramas
Las ramas en Git son livianas — un simple puntero a un commit. Crear y cambiar entre ramas es instantáneo:
# Listar ramas
git branch
# Crear una nueva rama
git branch feature/login
# Cambiar a esa rama
git checkout feature/login
# Crear y cambiar en un paso (Git >= 2.23)
git switch -c feature/login
# Eliminar una rama
git branch -d feature/login
# Ver ramas remotas
git branch -r
Merge: unir cambios
Cuando terminas una funcionalidad, fusionas los cambios a la rama principal (main o master):
git checkout main
git merge feature/login
# Merge con mensaje explícito
git merge feature/login -m "Integrar login: autenticación JWT"
Resolver conflictos de merge
Cuando dos ramas modifican las mismas líneas, Git no puede fusionar automáticamente y marca un conflicto:
# Git muestra: CONFLICT (content): Merge conflict en index.js
git status # Archivos en conflicto
# El archivo contendrá algo como:
<<<<<<< HEAD
const API_URL = 'https://api.ejemplo.com';
=======
const API_URL = 'https://api.produccion.com';
>>>>>>> feature/login
# Editar manualmente, luego:
git add index.js
git commit -m "Resolver conflicto en URL de API"
Sincronización remota: push y pull
Para colaborar se necesita un repositorio remoto (GitHub, GitLab, Bitbucket):
# Agregar remoto
git remote add origin https://github.com/usuario/proyecto.git
# Subir cambios
git push -u origin main # Primera vez (-u guarda upstream)
git push # Posteriores
# Traer cambios
git pull # fetch + merge
git pull --rebase # fetch + rebase
Flujos de trabajo: Git Flow y GitHub Flow
Dos metodologías populares para organizar ramas:
# GIT FLOW (ramas: main, develop, feature/*, release/*, hotfix/*)
git flow init
git flow feature start nueva-funcionalidad
git flow feature finish nueva-funcionalidad
# GITHUB FLOW (rama principal + feature branches + PRs)
git checkout -b feature/mejora
# ...trabajar...
git push origin feature/mejora
# Crear Pull Request en GitHub
# Revisar, discutir, mergear
git rebase vs merge
Mientras merge crea un commit de fusión preservando el historial exacto, rebase reescribe la historia para mantener una línea lineal:
# Rebase: reaplica los commits de tu rama sobre main
git checkout feature/rama
git rebase main
# Diferencia clave:
# merge: preserva el orden cronológico exacto
# rebase: historial lineal, más limpio
# ⚠️ NO hacer rebase en ramas compartidas
git stash: guardar cambios temporales
Cuando necesitas cambiar de rama pero no quieres perder cambios sin commitear:
git stash # Guardar cambios
git stash list # Listar stashes
git stash pop # Recuperar y eliminar stash
git stash drop # Eliminar stash específico
git stash branch feature/arreglo # Crear rama desde stash
