HDP115

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.

CE

Cristian Escalante

Última actualización: 22 de abril de 2025

git
control de versiones
desarrollo

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:

  1. Hacer commit de tus cambios:
    git add .
    git commit -m "Mensaje descriptivo"
    git checkout otra-rama
    
  2. 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
    
  3. 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

  1. Mantén las ramas actualizadas: Sincroniza regularmente tus ramas con la rama principal para evitar conflictos grandes.
  2. Usa ramas de corta duración: Las ramas que existen por mucho tiempo tienden a acumular conflictos.
  3. Una característica, una rama: Mantén cada rama enfocada en una sola tarea o característica.
  4. Limpia las ramas fusionadas: Elimina las ramas después de fusionarlas para mantener el repositorio organizado.
  5. Haz commits frecuentes: Incluso en tu rama personal, haz commits pequeños y frecuentes.
  6. 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.

¿Qué es una rama?
Comprende el concepto de ramas en Git, cómo funcionan intern...
Fusión de ramas
Aprende a fusionar ramas en Git mediante diferentes estrateg...
Referencias
Git. Git - git-branch Documentation. https://git-scm.com/docs/git-branch
Git. Git - git-switch Documentation. https://git-scm.com/docs/git-switch
Scott Chacon and Ben Straub. Pro Git Book - Git Branching. https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell

Conceptos Básicos de HTML

Aprende los conceptos básicos de HTML

Conceptos Básicos de CSS

Aprende los conceptos básicos de CSS

Conceptos Básicos de JavaScript

Aprende los conceptos básicos de JavaScript

Conceptos Básicos SQL

Aprende los conceptos básicos de SQL

Conceptos Básicos de Python

Aprende los conceptos básicos de Python

Conceptos Básicos de UML

Aprende los conceptos básicos de UML

Refuerzo Academico de Herramientas de Productividad 2025