Qué es una rama en Git (de verdad)
En Git, una rama no es una “carpeta” ni una copia completa del proyecto. Una rama es, principalmente, un puntero con nombre que apunta a un commit específico. Cuando haces nuevos commits estando en esa rama, el puntero se mueve hacia adelante para apuntar al commit más reciente.
Esto habilita el trabajo paralelo: puedes tener una rama para desarrollar una funcionalidad nueva, otra para corregir un bug, y mantener una rama principal estable. Cada línea de trabajo avanza con sus propios commits sin interferir con las demás.
HEAD: dónde estás parado
Además de las ramas, Git usa HEAD para indicar “en qué referencia estás actualmente”. Normalmente HEAD apunta a una rama (por ejemplo, main). Si cambias de rama, HEAD cambia con ella.
Ver ramas y entender el estado actual
Para listar ramas locales y ver cuál está activa:
git branchLa rama actual aparece marcada con *. Para ver también ramas remotas:
- Escuche el audio con la pantalla apagada.
- Obtenga un certificado al finalizar.
- ¡Más de 5000 cursos para que explores!
Descargar la aplicación
git branch -aPara ver a qué commit apunta cada rama (útil para “ver el puntero”):
git show-ref --headsCrear, cambiar y eliminar ramas
Crear una rama
Crea una rama nueva desde el commit actual (no te cambia de rama):
git branch feature/login-formCrear y cambiarte en un solo paso (recomendado):
git switch -c feature/login-formSi tu Git es antiguo, el equivalente es:
git checkout -b feature/login-formCambiar de rama
git switch mainSi tienes cambios sin commitear, Git puede impedir el cambio si esos cambios entrarían en conflicto con la otra rama. En ese caso, o bien commiteas, o bien guardas temporalmente con git stash (si ya lo viste en tu curso, úsalo como herramienta de apoyo).
Eliminar una rama
Eliminar una rama local que ya fue integrada (Git te protege):
git branch -d feature/login-formForzar eliminación (peligroso si no integraste y perderías referencia fácil a esos commits):
git branch -D feature/login-formEliminar una rama remota (por ejemplo en origin):
git push origin --delete feature/login-formConvenciones de nombres: claridad y orden
Nombrar ramas bien reduce confusión y acelera revisiones. Una convención simple y común es usar prefijos por tipo de trabajo:
feature/: nuevas funcionalidades (ej.feature/login-form)fix/: correcciones de bugs (ej.fix/null-pointer-checkout)chore/: tareas de mantenimiento (ej.chore/update-deps)
Buenas prácticas al nombrar:
- Usa minúsculas y guiones:
feature/user-profile - Evita nombres genéricos:
feature/testno dice nada - Si usas tickets, inclúyelos:
fix/1234-payment-timeout
Flujos comunes: rama principal estable + ramas de trabajo
Un flujo típico para principiantes (y muy usado en equipos) es:
- Rama principal estable:
main(omasteren repos antiguos). Debe estar siempre en estado “publicable”. - Ramas de trabajo: se crean desde
mainpara desarrollar o corregir algo sin romper la estabilidad.
La idea es simple: main avanza con cambios ya revisados/integrados; el trabajo en progreso vive en ramas separadas.
Escenario 1: desarrollar una funcionalidad en rama separada
Objetivo: implementar una pantalla de login sin afectar la estabilidad de main.
Paso a paso
Asegúrate de estar en
mainy actualizado (si trabajas con remoto):git switch mainSi tienes remoto configurado:
git pull origin mainCrea una rama de funcionalidad y cámbiate:
git switch -c feature/login-formTrabaja normalmente: edita archivos y crea commits en esa rama. Verifica dónde estás:
git branchEn cualquier momento puedes comparar qué cambió respecto a
main:git diff main..feature/login-formCuando termines, vuelve a
main:git switch mainIntegra la rama de funcionalidad en
main(merge):git merge feature/login-formSi no hubo divergencia compleja, puede ser un merge rápido (fast-forward). Si hubo cambios en ambos lados, Git puede crear un commit de merge o pedirte resolver conflictos.
Elimina la rama local si ya no la necesitas:
git branch -d feature/login-form
Escenario 2: bug urgente (hotfix) y volver a la rama principal
Situación: estás trabajando en una funcionalidad, pero aparece un bug crítico en producción. Necesitas corregirlo sin mezclar trabajo incompleto.
Meta del flujo
- Dejar tu trabajo en la rama de feature intacto.
- Crear una rama de fix desde
main. - Aplicar la corrección y volver a
maincon el bug resuelto.
Paso a paso
Si estás en tu rama de feature, verifica:
git branchVuelve a
main(si tienes cambios sin commitear y Git no te deja, primero commitea o guarda temporalmente):git switch mainActualiza
maindesde remoto si aplica:git pull origin mainCrea una rama de corrección:
git switch -c fix/urgent-checkout-crashAplica la corrección y crea el commit en la rama de fix.
Vuelve a
maine integra la corrección:git switch maingit merge fix/urgent-checkout-crashElimina la rama de fix si ya se integró:
git branch -d fix/urgent-checkout-crashRegresa a tu rama de feature para continuar:
git switch feature/login-form
Interpretar gráficos de historial: ver ramas, merges y divergencias
Para “leer” el historial con ramas, lo más útil es un log en forma de grafo:
git log --oneline --graph --decorate --allQué significa cada parte:
--graph: dibuja líneas ASCII mostrando bifurcaciones y merges.--decorate: muestra etiquetas como nombres de ramas apuntando a commits.--all: incluye todas las ramas (si no, solo verías la actual).
Ejemplo mental de lectura
Imagina que ves algo como esto:
* a12f9c0 (HEAD -> main) Merge branch 'feature/login-form' into main|\| * 91bd2aa (feature/login-form) Ajusta validación del formulario| * 7c1a110 UI inicial de login|/| * 55aa001 Corrige typo en README* 1f02b3c Base estableCómo interpretarlo:
mainapunta al commit de mergea12f9c0.feature/login-formapuntaba a91bd2aaantes de integrarse (puede seguir existiendo o ya haberse borrado).- Las líneas
|\y|/muestran la bifurcación y el reencuentro (merge).
Detectar ramas divergentes y entender “quién está adelante”
Una rama está divergente cuando ambas (por ejemplo main y tu rama de trabajo) tienen commits que la otra no tiene. Esto suele pasar si main avanzó mientras tú trabajabas en tu rama.
Ver diferencias de commits entre ramas
Commits que están en tu rama pero no en main:
git log --oneline main..feature/login-formCommits que están en main pero no en tu rama:
git log --oneline feature/login-form..mainResumen rápido de ahead/behind
git rev-list --left-right --count main...feature/login-formLa salida suele ser dos números: A B, donde A es cuántos commits tiene main que tu rama no tiene, y B cuántos commits tiene tu rama que main no tiene.
Señales típicas de divergencia en el grafo
- Ves dos “líneas” que se separan y no vuelven a unirse.
mainapunta a un commit distinto al de tu rama, y ambos tienen historia reciente propia.
Práctica guiada: mini-laboratorio de ramas (sin remoto)
Ejercicio para interiorizar punteros y divergencia en un repo local:
Crea una rama de feature y haz un commit:
git switch -c feature/demo-branchesHaz cambios y commitea (1 o 2 commits).
Vuelve a
mainy haz un commit distinto (simula que el equipo avanzó):git switch mainHaz un cambio pequeño y commitea.
Ahora mira el grafo:
git log --oneline --graph --decorate --allDetecta divergencia comparando commits:
git log --oneline main..feature/demo-branchesgit log --oneline feature/demo-branches..mainIntegra la rama (merge) y vuelve a mirar el grafo:
git merge feature/demo-branches