Crear y Cambiar Ramas en Git
Las ramas (branches) son el superpoder de Git: te permiten aislar líneas de desarrollo para experimentar, corregir errores o construir funcionalidades sin afectar la estabilidad de main. Dominar su creación y cambio es fundamental para un flujo de trabajo eficaz.
1. Modelo Mental
main (antes master) es la historia publicada estable. Una rama es un puntero móvil a un commit. Al crear una rama dices: “Desde aquí inicio una nueva línea de trabajo”. No se copia el árbol; sólo se crea una referencia ligera.
Ideas clave:
- Una rama apunta a un commit.
HEADindica qué rama (o commit) tienes activa.- Cada commit avanza el puntero de la rama.
Son baratas: usa una por feature, bugfix o experimento.
2. Listar Ramas Existentes
Local:
$ git branchActual marcada con *. Local + remotas:
$ git branch -aCon último commit:
$ git branch -vEliminar referencias remotas obsoletas:
$ git fetch --prune3. Crear una Nueva Rama
Actualizar base (normalmente main):
$ git checkout main
$ git pull origin mainSólo crear:
$ git branch feature/login-formCrear y cambiar (recomendado):
$ git switch -c feature/login-formSintaxis antigua:
$ git checkout -b feature/login-formConvenciones sugeridas:
feature/<nombre>funcionalidadbugfix/<ticket>correcciónhotfix/<critico>parche urgente producciónrefactor/…,chore/…, etc.
Evita espacios, mayúsculas y nombres ambiguos (new, temp).
4. Cambiar de Rama
$ git switch feature/login-formViejo:
$ git checkout feature/login-formGit bloquea el cambio si perderías cambios sin commit. Opciones:
- Commit
- Stash:
git stash push -m "WIP" - Descartar:
git restore .
Volver a la anterior:
$ git switch -Estado Detached HEAD
Si haces checkout a un commit:
$ git checkout 4f2a9c1Estás “detached”. Puedes probar, pero commits sin rama pueden perderse. Para conservar:
$ git switch -c experiment/performance-tuning5. Mantener Actualizada la Rama
Mientras desarrollas, main sigue avanzando:
$ git switch feature/login-form
$ git fetch origin
$ git merge origin/mainHistoria lineal (si trabajas solo):
$ git fetch origin
$ git rebase origin/mainNo rebases ramas compartidas (reescribe hashes).
6. Subir la Rama (Push)
Hasta hacer push es sólo local:
$ git push -u origin feature/login-formVer tracking:
$ git branch -vv7. Renombrar Rama
En la misma rama:
$ git branch -m feature/login-form feature/auth-uiActualizar remoto:
$ git push origin :feature/login-form
$ git push -u origin feature/auth-ui8. Eliminar Ramas
Tras integrar y no necesitarla: Local:
$ git branch -d feature/login-formForzar:
$ git branch -D feature/login-formRemoto:
$ git push origin --delete feature/login-form9. Ejemplo de Flujo Feature
- Actualiza main
- Crea rama feature
- Commits pequeños y descriptivos
- Rebase o merge regular desde
origin/main - Push + PR/MR
- Elimina rama local y remota tras merge
10. Problemas Frecuentes
| Situación | Causa | Solución |
|---|---|---|
| No cambia de rama | Cambios sobrescritos | Commit / stash / restore |
| Detached HEAD | Commit directo | git switch -c nombre |
| Falta rama tras clonar | Sólo rama por defecto | git fetch --all + switch |
| Push rechazado | Remote avanzó | git pull --rebase + push |
| Rama borrada accidentalmente | Sin referencia | git reflog + nueva rama |
11. Uso Estratégico
Además de features:
- Prototipos
- Hotfix desde tags
- (Limitados) branches de integración
- Cambios de docs/infra
Mantén ramas cortas: menos divergencia, menos conflictos.
12. Ejercicio
- Init o clona repo
- Crea
feature/colorsy añade archivo - Dos commits
- Rebase tras cambio en
main - Renombra a
feature/theme-colors - Push + PR
- Merge y borra
13. Claves
- Crear ramas es instantáneo → abusa de ello
switches más claro quecheckoutpara ramas- Actualiza pronto para minimizar fricción
- Limpia ramas viejas
- Crea rama antes de experimentar
Dominar branching habilita rebase avanzado y estrategias multi-rama.
