1. Introducción a las ramas
¿Qué es una rama (branch)?
Una rama (branch) es una línea independiente de desarrollo en Git. Imagina que tu proyecto es como una línea de tiempo: en lugar de escribir todo linealmente, las ramas te permiten crear caminos alternativos para trabajar en diferentes características, sin afectar el flujo principal de tu código.
¿Por qué se utilizan las ramas?
Trabajo en equipo
Varios desarrolladores pueden trabajar simultáneamente en diferentes funcionalidades sin conflictos.
Estabilidad
El código principal (main) siempre funciona, mientras desarrollas en ramas separadas.
Organización
Cada feature o fix se desarrolla en su propia rama, manteniendo el proyecto organizado.
Control
Revisa cambios antes de fusionar (merge) con el código principal usando Pull Requests.
Comparación: Sin ramas vs Con ramas
Sin ramas
Todo el trabajo ocurre en main:
- Código incompleto va al repositorio principal
- Difícil colaborar sin conflictos
- No hay control sobre qué se incluye
- Difícil revertir cambios específicos
Con ramas
Cada feature en su propia rama:
- Código limpio y funcional en main
- Fácil colaboración entre desarrolladores
- Revisiones antes de fusionar
- Historial claro de cambios
Ejemplo práctico: Proyecto con múltiples funcionalidades
main (rama principal - código en producción)
│
├── feature/login (Juan está aquí)
│ └── Implementando sistema de autenticación
│
├── feature/carrito (María está aquí)
│ └── Desarrollando carrito de compras
│
└── bugfix/homepage (Pedro está aquí)
└── Arreglando error en la portada
2. Visualización de ramas
Ver las ramas locales
Para ver todas las ramas que existen en tu repositorio local, usa:
Significado del símbolo *
El asterisco (*) indica tu rama actual. En el ejemplo anterior, estás trabajando en main.
Si haces cambios, se guardarán en esta rama.
Más opciones útiles
| Comando | Descripción |
|---|---|
git branch -a |
Muestra todas las ramas (locales y remotas) |
git branch -r |
Muestra solo ramas remotas (en GitHub) |
git branch -v |
Muestra ramas con el último commit de cada una |
git branch -d nombre |
Elimina una rama (veremos después) |
3. Creación de ramas
¿Cómo crear una rama?
Crear una rama es simple: le das un nombre descriptivo basado en lo que vas a trabajar. La nueva rama será una copia del estado actual de tu rama.
Comando básico
¿Qué sucede?
Se crea una nueva rama llamada usuarios, pero aún sigues en tu rama actual.
Para verificar:
El asterisco sigue en main, así que aún estás aquí.
Convenciones de nombres para ramas
feature/nombre-funcionalidad— Para nuevas característicasbugfix/nombre-bug— Para arreglat erroreshotfix/nombre-urgente— Para arreglos urgentes en producciónrefactor/nombre-cambio— Para mejoras de código- Usa guiones, no espacios ni mayúsculas
Ejemplos prácticos
git branch feature/login — Crear rama para sistema de login
git branch bugfix/carrito-error — Crear rama para fix de carrito
git branch refactor/estilos-css — Crear rama para refactorizar CSS
4. Cambio entre ramas
Moverse entre ramas
Crear una rama no te coloca automáticamente en ella. Necesitas cambiar a esa rama para empezar a trabajar. Hay dos formas de hacerlo:
Opción 1: git checkout
Ahora verifica:
Opción 2: git switch (más moderno)
Diferencias entre checkout y switch
| Aspecto | git checkout | git switch |
|---|---|---|
| Antigüedad | Más antiguo (tradicional) | Más nuevo (Git 2.23+) |
| Uso principal | Cambiar ramas y deshacer cambios | Solo cambiar ramas |
| Claridad | Menos clara (múltiples funciones) | Más clara (solo cambia ramas) |
| Recomendación | Funciona bien | ✓ Mejor para cambiar ramas |
git switch es más moderno y recomendado.
5. Crear y cambiar de rama en un solo comando
¿Por qué combinarlo?
Normalmente, crear una rama y cambiar a ella son acciones consecutivas. Git permite hacerlas juntas con un solo comando, que es mucho más eficiente.
Opción 1: git checkout -b
Esto crea la rama feature/usuarios y te cambia a ella automáticamente.
Opción 2: git switch -c (más moderno)
Comparación
git checkout -b
Comando que conocemos desde hace años. Funciona perfectamente.
git switch -c
Sintaxis más clara. -c significa "create" (crear).
Ejemplos prácticos
git checkout -b bugfix/error-login — Crear y cambiar a rama de fix
git switch -c feature/carrito-compras — Crear y cambiar a rama de feature
6. Verificar la rama actual
Método 1: git branch
El asterisco muestra que estás en feature/usuarios.
Método 2: git status
git status nos muestra en qué rama estamos y también información sobre cambios no commitidos.
¿Cuándo usar cada uno?
| Comando | Información que da | Mejor para |
|---|---|---|
git branch |
Solo lista de ramas | Ver todas las ramas disponibles |
git status |
Rama actual + cambios pendientes | Ver estado completo del repositorio |
7. Trabajo dentro de una rama
Cada rama es independiente
Cuando estás en una rama, todos tus cambios afectan solo a esa rama. El código en main
permanece intacto. Esto es la magia de las ramas: aislamiento total.
Flujo de trabajo típico
Asume que estamos en feature/usuarios:
Abre tu editor y realiza cambios en los archivos de tu proyecto.
. significa "todos los archivos modificados"
¿Qué hace cada comando?
| Comando | Función | Ejemplo |
|---|---|---|
git add . |
Prepara TODOS los cambios para guardar | git add . |
git add archivo.js |
Prepara UN archivo específico | git add app.js |
git commit -m "msg" |
Guarda (hace snapshot) con un mensaje | git commit -m "Agregar login" |
8. Subir una rama a GitHub
Diferencia: Local vs Remoto
Repositorio Local
Tus ramas y cambios en tu computadora (invisible para el equipo).
Repositorio Remoto
Tus ramas en GitHub (visible para todos los colaboradores).
El comando para subir
Desglose del comando
| Parte | Significado |
|---|---|
git push |
Subir cambios al repositorio remoto |
-u |
Flag que configura esta rama como "seguida" (próximas veces solo necesitas git push) |
origin |
Nombre del repositorio remoto (por defecto, es GitHub) |
feature/usuarios |
Nombre de la rama que estás subiendo |
¿Qué ocurre en GitHub?
Después de ejecutar el comando, tu rama aparece en GitHub:
- Puedes ver tu rama en la pestaña de "Branches"
- GitHub te sugiere crear un Pull Request automáticamente
- Tu equipo puede ver tu trabajo en progreso
Proximas veces
Una vez que configuraste con -u, los próximos push son más simples:
Git sabe automáticamente a dónde subir.
9. Descargar información de GitHub
git fetch: Sincronizar sin descargar
git fetch descarga toda la información de GitHub (ramas nuevas, cambios del equipo)
pero no modifica tu código.
Ver ramas remotas
Para ver qué ramas existen en GitHub después de fetch:
Desglose de la salida
origin/indica que es una rama remota (en GitHub)origin/HEADes la rama por defecto del repositorio remoto- Cada rama que ves es una rama que existe en GitHub
git branch— Solo ramas localesgit branch -r— Solo ramas remotasgit branch -a— Todas las ramas (locales + remotas)
10. Trabajar con ramas remotas
Obtener una rama del repositorio remoto
Cuando tu compañero sube una rama a GitHub, quizá necesites trabajar con esa rama. Primero, debes descargarla localmente:
Luego, crea una rama local que siga la rama remota:
Desglose del comando
| Parte | Significado |
|---|---|
git checkout -b |
Crear y cambiar a una rama nueva |
feature/carrito |
Nombre de la rama LOCAL que vas a crear |
origin/feature/carrito |
Rama REMOTA que vas a seguir (la fuente) |
Forma más simple (Git 2.23+)
Si usas Git moderno, Git es lo suficientemente inteligente para hacerlo solo:
Git automáticamente busca una rama remota con ese nombre y la descarga.
git switch cuando quieras trabajar con una rama remota. Es más simple.
11. Fusionar ramas (Merge)
¿Qué es un merge?
Merge significa "fusión". Es el proceso de combinar los cambios de una rama con otra (típicamente, mezclar una feature branch con main).
¿Cuándo se utiliza?
- Cuando terminas una feature: La merge a main para que esté en producción
- Cuando aceptas cambios: Un compañero finalizó su trabajo, lo merges a main
- Cuando sincronizas: Main tiene cambios nuevos, los traes a tu rama
Flujo de merge paso a paso
1. Cambia a la rama de destino (main)
2. Descarga los cambios más recientes de GitHub
3. Fusiona la rama que terminaste
Diagrama visual del merge
Antes del merge: main → Commit A feature/usuarios → Commit B (cambios nuevos) Después del merge: main → Commit A - Commit B ✓ feature/usuarios → Commit B (todavía aquí) El código de feature/usuarios ahora está en main
Tipos de merge
1. Fast-forward (el más común)
Git simplemente mueve el apuntador de main. No hay conflictos.
2. Merge commit (cuando hay cambios paralelos)
Git crea un commit especial que une dos líneas de código.
¿Qué pasa si hay conflictos?
Si Git no puede fusionar automáticamente (conflicto), te lo notifica. Veremos esto en profundidad en lecciones posteriores.
main y haber hecho git pull antes de mergear.
12. Subir el resultado del merge
Después de mergear localmente
Una vez que mezclaste tu rama en main, los cambios están en tu computadora pero aún no en GitHub. Debes subirlos:
¿Qué cambios llegan a GitHub?
- Todos los commits de feature/usuarios ahora están en main
- El historial de main se actualiza
- Tu equipo puede ver los cambios en GitHub
- Usuarios en producción pueden recibir la versión actualizada (si se despliega desde main)
13. Eliminación de ramas
¿Por qué eliminar ramas?
Una vez que mergeas una rama, ya no la necesitas. Mantener ramas antiguas hace el proyecto confuso. Buena práctica: eliminar ramas después de usarlas.
Eliminar rama local (segura)
El flag -d (delete) elimina la rama solo si ya fue mergeada. Es segura.
Forzar eliminación (peligrosa)
El flag -D (Delete forzado) elimina la rama SIN verificar si fue mergeada. ¡Cuidado!
Eliminar rama remota (en GitHub)
Esto elimina la rama en GitHub (pero la tuya local sigue existiendo).
Tabla de decisión
| Situación | Comando | Seguridad |
|---|---|---|
| Branch local mergeada | git branch -d nombre |
✓ Segura |
| Branch local SIN mergear (error) | git branch -D nombre |
⚠️ Cuidado |
| Branch remota en GitHub | git push origin --delete nombre |
✓ Elimina en GitHub |
-d), luego la remota (git push origin --delete).
14. Flujo completo de trabajo: Ejemplo "Login"
Escenario
Necesitas implementar un sistema de login en tu sitio. Harás todo desde git clone hasta eliminar la rama. Veamos paso a paso:
Esto descarga todo el repositorio en una carpeta local.
Abre tu editor y crea/modifica archivos (login.html, login.js, login.css, etc.)
15. Pull Requests
¿Qué es un Pull Request?
Un Pull Request (PR) es una solicitud formal para mergear tu rama en main. En lugar de mergear localmente, abres una PR en GitHub para que otros revisen tu código antes de aceptarlo.
¿Por qué usar Pull Requests?
Revisión de código
Otros pueden ver y comentar tus cambios antes de mergearse.
Aprobación
Solo se acepta código que fue revisado y aprobado.
Automatización
Tests automáticos se ejecutan antes de mergear.
Historial
Queda un registro de quién aprobó qué cambios.
Flujo de trabajo con Pull Requests
Paso 1: Crear y cambiar a rama (como siempre)
Paso 2: Hacer cambios y commits
Paso 3: Subir rama a GitHub
Paso 4: Abrir Pull Request en GitHub
- Ve a GitHub en tu navegador
- Verás un botón verde "Compare & pull request"
- Haz clic y rellena:
- Título: Resumen breve de cambios
- Descripción: Explicar qué, por qué y cómo
- Haz clic en "Create pull request"
En el Pull Request
Después de crear el PR:
- Tu equipo ve los cambios en la pestaña "Files changed"
- Pueden comentar líneas específicas de código
- Tests automáticos se ejecutan (si están configurados)
- Alguien revisa y aprueba el PR (o pide cambios)
Flujo de aprobación
TÚ: Creas PR con tu rama
↓
REVISOR: Lee código, comenta
↓
TÚ: Realizas cambios solicitados, haces push
↓
REVISOR: Aprueba el PR
↓
ALGUIEN: Haz clic en "Merge pull request"
↓
GITHUB: Automáticamente mergea feature→main
Ventajas sobre merge local
| Aspecto | Merge local | Pull Request |
|---|---|---|
| Revisión | No hay | ✓ Formal y asincrónica |
| Documentación | Mínima | ✓ Completa con comentarios |
| Historial | Básico | ✓ Detallado con decisiones |
| Equipo pequeño | Ágil | Overhead |
| Equipo grande | Caos | ✓ Esencial |
Resumen: Cómo es distinto con PRs
En lugar de:
Haces:
Resumen: Comandos clave a recordar
| Acción | Comando | Cuándo |
|---|---|---|
| Ver ramas locales | git branch |
Verificar dónde estás |
| Crear rama | git branch nombre |
Antes de cambiar a ella |
| Cambiar de rama | git switch nombre |
Antes de trabajar |
| Crear y cambiar | git switch -c nombre |
Forma más rápida (recomendada) |
| Preparar cambios | git add . |
Después de editar archivos |
| Crear commit | git commit -m "msg" |
Guardar un checkpoint |
| Subir a GitHub | git push -u origin nombre |
Primera vez en una rama |
| Subir cambios | git push |
Cambios posteriores |
| Descargar cambios | git fetch |
Ver qué hay nuevo en GitHub |
| Ver ramas remotas | git branch -r |
Después de fetch |
| Trabajar rama remota | git switch nombre |
Descargar rama de compañero |
| Fusionar rama | git merge nombre |
Estar en main, luego mergear |
| Eliminar rama local | git branch -d nombre |
Después de mergear |
| Eliminar rama GitHub | git push origin --delete nombre |
Limpiar repositorio remoto |