Por Anónimo (no verificado) , 29 Abril 2026

Introducción

Los branches son cómo Git soporta líneas de trabajo paralelas. Crear un branch es esencialmente gratis: es solo un archivo de 41 bytes que contiene un hash de commit. Úsalos generosamente para features, experimentos y arreglos de bugs.

Comandos modernos

Desde Git 2.23 hay dos comandos especializados: git switch para branches y git restore para archivos. Úsalos; son más claros que el comportamiento sobrecargado de git checkout.

git switch main                    # cambiar a un branch existente
git switch -c feature/login        # crear y cambiar
git switch -c hotfix v1.2.3        # crear desde un tag
git switch -                       # branch anterior (como cd -)

Listando branches

git branch                    # local
git branch -r                 # remote-tracking
git branch -a                 # todos
git branch -vv                # con upstream y ahead/behind
git branch --merged           # mergeados al actual
git branch --no-merged        # aún no mergeados

Renombrando y eliminando

git branch -m old new             # renombrar
git branch -m new                  # renombrar el branch actual
git branch -d feature/login        # eliminar branch mergeado
git branch -D feature/abandoned    # forzar eliminación de no mergeado

-d rechaza si el branch tiene commits no mergeados, protegiendo el trabajo.

Rastreando branches remotos

git switch feature/login           # auto-crea local desde origin/feature/login
git switch -c mine origin/feature/login   # explícito
git branch -u origin/main          # establecer upstream del branch actual

La sintaxis clásica

Los tutoriales antiguos usan git checkout. Aún funciona:

git checkout main
git checkout -b feature/login
git checkout v1.2.3

El inconveniente es que el mismo comando también restaura archivos, lo que causa confusión. Prefiere switch y restore en scripts nuevos.

Convenciones de nombres de branches

Los nombres consistentes facilitan las herramientas. Patrones comunes:

  • feature/<ticket>-short-desc
  • bugfix/<ticket>-short-desc
  • hotfix/<version>
  • release/<version>
git switch -c feature/PROJ-123-add-search
git config --global branch.autoSetupMerge always
git config --global branch.autoSetupRebase always

Las opciones autoSetup aseguran que los nuevos branches automáticamente rastreen su punto de partida, lo que hace que la línea ahead/behind de git status sea significativa desde el día uno.

Renombrando en el remoto

Renombrar un branch remoto son dos operaciones: renombrar localmente y crear la nueva ref en el servidor, luego eliminar la antigua:

git branch -m old new
git push -u origin new
git push origin --delete old

Errores comunes

Cambiar de branch con cambios no commiteados que conflictan con el destino; Git rechaza, y el arreglo es commitear, stashear o usar git switch --discard-changes si realmente no los quieres. Crear docenas de branches de larga vida y nunca eliminar los mergeados; git branch --merged | xargs git branch -d ordena. Nombrar branches con caracteres que confunden a las shells (espacios, caracteres glob); apégate a letras, dígitos, slash y guión. Finalmente, eliminar un branch con -D y entrar en pánico al darte cuenta de que tenía trabajo no mergeado; el reflog aún lo tiene durante 90 días: git reflog, encuentra el SHA, git switch -c rescued <sha>.