Crear y cambiar de ramas
Aprende a crear nuevas ramas en Git, cambiar entre ellas y gestionar tu flujo de trabajo con ramificaciones para un desarrollo más organizado y eficiente.
Cristian Escalante
Última actualización: 22 de abril de 2025
Crear y cambiar de ramas
Una vez que entendemos qué son las ramas en Git y por qué son útiles, el siguiente paso es aprender a crearlas y a movernos entre ellas. Estos comandos son fundamentales para implementar flujos de trabajo basados en ramas, permitiéndote trabajar en múltiples características o correcciones de forma simultánea y organizada.
Listar ramas existentes
Antes de crear nuevas ramas, es útil saber qué ramas ya existen en tu repositorio:
git branch
Este comando muestra una lista de todas las ramas locales, con un asterisco (*) junto a la rama activa actual.
Para ver tanto las ramas locales como las remotas:
git branch -a
Crear una nueva rama
Hay varias formas de crear una nueva rama en Git:
Método 1: Usando git branch
git branch nombre-de-rama
Este comando crea una nueva rama que apunta al commit actual, pero no cambia a ella automáticamente. Sigues en la misma rama en la que estabas.
Método 2: Usando git checkout (forma tradicional)
git checkout -b nombre-de-rama
Este comando crea una nueva rama y cambia a ella inmediatamente. Es equivalente a ejecutar git branch nombre-de-rama
seguido de git checkout nombre-de-rama
.
Método 3: Usando git switch (Git 2.23+)
git switch -c nombre-de-rama
Este es un comando más nuevo introducido en Git 2.23 que fue diseñado específicamente para cambiar entre ramas, haciendo que la sintaxis sea más intuitiva. La opción -c
crea una nueva rama y cambia a ella.
Cambiar entre ramas
Una vez que tienes múltiples ramas, necesitas poder moverte entre ellas:
Usando git checkout (forma tradicional)
git checkout nombre-de-rama
Usando git switch (Git 2.23+)
git switch nombre-de-rama
Crear una rama desde un commit específico
Puedes crear una rama que comience desde cualquier commit en el historial, no solo desde el commit actual:
git branch nombre-de-rama hash-del-commit
# o
git checkout -b nombre-de-rama hash-del-commit
# o
git switch -c nombre-de-rama hash-del-commit
Donde hash-del-commit
es el identificador SHA-1 (completo o abreviado) del commit desde el que quieres ramificar.
Crear una rama desde una etiqueta
De manera similar, puedes crear una rama desde una etiqueta (tag):
git branch nombre-de-rama nombre-de-etiqueta
# o
git checkout -b nombre-de-rama nombre-de-etiqueta
# o
git switch -c nombre-de-rama nombre-de-etiqueta
Convenciones de nomenclatura para ramas
Adoptar una convención de nomenclatura coherente para las ramas ayuda a mantener el repositorio organizado:
Por tipo de cambio
feature/nombre-de-caracteristica
bugfix/descripcion-del-error
hotfix/problema-urgente
release/version-x.y.z
docs/actualizacion-documentacion
Por identificador de ticket
Si usas un sistema de seguimiento de problemas:
issue-123/breve-descripcion
JIRA-456/nombre-de-tarea
Por desarrollador
En equipos pequeños:
usuario/nombre-de-caracteristica
Cambiar de rama con cambios sin confirmar
Escenario 1: Cambios compatibles
Si tienes cambios sin confirmar (uncommitted changes) que no entran en conflicto con la rama a la que quieres cambiar, Git te permitirá cambiar de rama y llevará tus cambios contigo:
git checkout otra-rama
# o
git switch otra-rama
Escenario 2: Cambios conflictivos
Si los cambios sin confirmar entrarían en conflicto con la rama de destino, Git no te permitirá cambiar:
error: Your local changes to the following files would be overwritten by checkout:
archivo.txt
Please commit your changes or stash them before you switch branches.
En este caso, tienes varias opciones:
- Hacer commit de tus cambios:
git add . git commit -m "Mensaje descriptivo" git checkout otra-rama
- Guardar temporalmente los cambios (stash):
git stash git checkout otra-rama # Más tarde, para recuperar los cambios: git checkout rama-original git stash pop
- Descartar los cambios (¡cuidado, esto es irreversible!):
git restore . # Git moderno # o git checkout -- . # Git antiguo
Opciones avanzadas
Crear una rama de seguimiento (tracking branch)
Para crear una rama local que siga una rama remota:
git checkout -b rama-local origin/rama-remota
# o
git checkout --track origin/rama-remota
# o
git switch -c rama-local origin/rama-remota
Cambiar a la rama anterior
Para alternar rápidamente entre la rama actual y la anterior:
git checkout -
# o
git switch -
Forzar el cambio de rama
En situaciones excepcionales, puedes forzar el cambio a otra rama incluso con cambios conflictivos (¡cuidado, podrías perder cambios!):
git checkout -f otra-rama
Gestión de ramas
Renombrar una rama
Para renombrar la rama actual:
git branch -m nuevo-nombre
Para renombrar una rama específica:
git branch -m nombre-antiguo nuevo-nombre
Eliminar una rama
Una vez que has terminado con una rama y has fusionado sus cambios, puedes eliminarla:
git branch -d nombre-de-rama # Eliminación segura (falla si hay cambios sin fusionar)
git branch -D nombre-de-rama # Forzar eliminación (incluso con cambios sin fusionar)
Flujos de trabajo comunes
Crear una rama de característica
# Asegúrate de estar en la rama principal actualizada
git checkout main
git pull
# Crea y cambia a una nueva rama de característica
git checkout -b feature/nueva-funcionalidad
Trabajar en múltiples características
# Trabajando en la primera característica
git checkout -b feature/caracteristica-1
# Hacer cambios, commits...
# Necesitas trabajar en otra característica urgente
git add .
git commit -m "WIP: Guarda progreso en característica 1"
git checkout main
git pull
git checkout -b feature/caracteristica-urgente
# Trabajar en la característica urgente...
# Volver a la primera característica
git checkout feature/caracteristica-1
Sincronizar una rama con la principal
# Estando en tu rama de característica
git checkout feature/mi-caracteristica
# Opción 1: Merge (fusionar main en tu rama)
git merge main
# Opción 2: Rebase (reescribir tu rama sobre main)
git rebase main
Buenas prácticas
- Mantén las ramas actualizadas: Sincroniza regularmente tus ramas con la rama principal para evitar conflictos grandes.
- Usa ramas de corta duración: Las ramas que existen por mucho tiempo tienden a acumular conflictos.
- Una característica, una rama: Mantén cada rama enfocada en una sola tarea o característica.
- Limpia las ramas fusionadas: Elimina las ramas después de fusionarlas para mantener el repositorio organizado.
- Haz commits frecuentes: Incluso en tu rama personal, haz commits pequeños y frecuentes.
- Prueba antes de fusionar: Asegúrate de que tu rama funciona correctamente antes de fusionarla con la rama principal.
Solución de problemas comunes
"Cannot switch branch because you have unstaged changes"
Problema: No puedes cambiar de rama debido a cambios sin confirmar.
Solución: Usa git stash
para guardar temporalmente tus cambios, o haz un commit.
"The branch 'X' is not fully merged"
Problema: Git no te permite eliminar una rama porque detecta cambios que no han sido fusionados.
Solución: Asegúrate de que los cambios importantes estén fusionados, o usa git branch -D
para forzar la eliminación.
"Your branch is ahead of 'origin/main' by X commits"
Problema: Has hecho commits locales que no están en el repositorio remoto.
Solución: Usa git push
para enviar tus commits al servidor, o git pull
para actualizar tu rama local si hay cambios remotos.
Conclusión
Dominar la creación y gestión de ramas es fundamental para aprovechar al máximo Git. Las ramas te permiten trabajar en múltiples aspectos de un proyecto simultáneamente, experimentar con nuevas ideas sin afectar el código principal, y colaborar eficientemente con otros desarrolladores.
A medida que te familiarices con estos comandos, encontrarás tu propio flujo de trabajo que se adapte a tus necesidades y a las de tu equipo. En la próxima lección, aprenderemos cómo fusionar ramas para integrar los cambios de vuelta en la rama principal.