Git — Gestión de ramas

Ver ramas

DescripciónComando
Ver ramas localesgit branch
Ver ramas locales con último commitgit branch -v
Ver ramas locales y remotasgit branch -va
Ver solo ramas remotasgit branch -r
Ver qué ramas están fusionadas en mastergit branch --merged master

Cambiar de rama

Forma clásica:

git checkout nombre-rama

Forma moderna (recomendada desde Git 2.23):

git switch nombre-rama

git switch es más explícito y seguro que checkout para operaciones con ramas — no mezcla responsabilidades con la restauración de archivos.

Crear ramas

DescripciónCheckoutSwitch
Crear y cambiar a una nueva ramagit checkout -b nombre-ramagit switch -c nombre-rama
Crear rama desde otra ramagit checkout -b nueva origengit switch -c nueva origen
Crear rama desde un commitgit checkout -b nueva abc1234git switch -c nueva abc1234

Sincronizar con el remoto

# Traer cambios del remoto sin fusionar
git fetch origin

# Traer cambios del remoto y fusionar en la rama actual
git pull origin master

# Limpiar referencias a ramas remotas ya eliminadas
git fetch --prune

# Limpiar referencias obsoletas manualmente
git branch -rd origin/nombre-rama

Subir ramas al remoto

# Subir una rama y establecer seguimiento
git push -u origin nombre-rama

# Subir varias ramas a la vez
git push origin rama-1 rama-2 rama-3

Fusionar ramas (merge)

# Situarse en master primero
git checkout master   # o: git switch master

# Fusionar con commit de merge explícito (recomendado)
git merge --no-ff nombre-rama -m "Merge nombre-rama"

--no-ff crea siempre un commit de merge aunque sea posible hacer fast-forward. Deja el historial más legible.

Flujo completo: merge + borrar rama + push

git checkout master
git merge --no-ff <rama>
git branch -d <rama>                   # local (-d es seguro, avisa si no está mergeada)
git push origin --delete <rama>        # remota
git push origin master

Comprobar si una rama está mergeada

# Listado de ramas ya mergeadas en master
git branch --merged master

# Comprobación fiable con merge-base
git merge-base --is-ancestor <rama> master && echo "merged" || echo "NOT merged"

Eliminar ramas

# Eliminar rama local (solo si está fusionada)
git branch -d nombre-rama

# Eliminar rama local forzado
git branch -D nombre-rama

# Eliminar rama en el remoto
git push origin --delete nombre-rama

Archivar ramas antiguas

Útil para ramas de máquinas o configuraciones antiguas que no quieres fusionar pero tampoco perder.

# Crear tag de archivo apuntando a la rama remota
git tag archive/nombre origin/nombre

# Subir el tag al remoto
git push origin archive/nombre

# Eliminar la rama remota (ya está preservada en el tag)
git push origin --delete nombre

Para recuperar el contenido en el futuro:

git checkout -b nombre archive/nombre
# o:
git switch -c nombre archive/nombre

Denominación de ramas

feature/descripcion-corta
fix/descripcion-corta
feat/descripcion-corta
hotfix/descripcion-corta
docs/descripcion-corta
archive/nombre-maquina

Flujo habitual entre dos máquinas

# Máquina A — subir ramas para validar en otra máquina
git push origin rama-1 rama-2

# Máquina B — traer y listar
git fetch origin
git branch -va

# Máquina B — cambiar a una rama y probarla
git switch rama-1

# Máquina A — si la rama está validada, fusionar y limpiar
git switch master
git merge --no-ff rama-1 -m "Merge rama-1"
git push origin master
git branch -d rama-1
git push origin --delete rama-1