← Git

Ramas

¿Qué es una rama (branch) en Git y para qué sirve?

Ver respuesta — intenta responderla en voz alta primero

Una rama es un puntero móvil a un commit. Sirve para trabajar en algo (una feature, un fix) de forma aislada, sin tocar la rama principal, y luego integrarlo cuando esté listo. Crear ramas en Git es barato y rápido porque solo es crear un puntero.

Mucha gente imagina una rama como una "copia" del proyecto, pero no lo es. Una rama es simplemente una etiqueta que apunta a un commit. Cuando haces un commit nuevo, la rama en la que estás avanza para apuntar a ese commit.

HEAD es otro puntero especial: apunta a la rama (o commit) en la que estás parado ahora mismo.

¿Para qué sirven?

  • Para desarrollar una funcionalidad sin romper la rama principal (main).
  • Para que varias personas trabajen en paralelo sin pisarse.
  • Para experimentar y, si algo sale mal, borrar la rama sin consecuencias.

Como una rama es solo un puntero, crearla es instantáneo: no copia archivos.

# Ver las ramas que existen (la actual tiene un *)
git branch
# * main
#   nueva-feature

# Ver a qué commit apunta cada rama
git branch -v
# * main         1a2b3c4 Corrige login
#   nueva-feature 5d6e7f8 Agrega registro

# Saber en qué rama estoy (HEAD)
git status
# On branch main

# Crear una rama nueva (apunta al commit actual)
git branch experimento
# La rama existe, pero sigo en main hasta que cambie a ella

Pensar que una rama duplica todos los archivos del proyecto, o que trabajar en una rama nueva "guarda" automáticamente lo de la otra. En realidad la rama solo es un puntero; los cambios sin commitear pueden "viajar" contigo si cambias de rama sin haberlos guardado. También se confunde HEAD (dónde estás) con una rama (una etiqueta a un commit).

"Una rama es un puntero móvil a un commit, no una copia del proyecto. Cuando hago un commit, la rama avanza a ese commit. HEAD es el puntero que indica en qué rama estoy parado. Uso ramas para trabajar en una feature o un fix de forma aislada sin tocar main, para que el equipo trabaje en paralelo y para experimentar sin miedo. Como solo es un puntero, crear ramas es instantáneo y muy barato."

Reto rápido

Si creas una rama nueva con git branch feature estando en main, ¿a qué commit apunta feature recién creada?

Ver respuesta

Al mismo commit al que apunta main en ese momento (el commit actual, donde está HEAD). Ambas ramas apuntan al mismo commit hasta que hagas un commit nuevo en alguna de ellas, momento en el que solo esa rama avanzará.