Git básico

Ramas: probar sin romper lo que funciona

Lección 4 de 8 · 14 min

El problema que resuelven

Tu plantilla de cotización funciona y se está usando. Te piden probar un formato nuevo, bastante distinto, que quizá no se apruebe.

Sin ramas solo hay dos salidas malas: modificar la buena y cruzar los dedos, o hacer una copia de la carpeta -y volver a plantilla_nueva_v2, que es justo de donde veníamos huyendo.

Una rama es la tercera salida: una línea de trabajo paralela dentro del mismo repositorio. Lo que hagas en ella no toca la otra hasta que tú decidas juntarlas.

Qué es una rama, de verdad

Aquí conviene tirar la metáfora del árbol y quedarse con la definición técnica, que además es más simple: una rama es un nombre que apunta a un commit. Nada más.

Cuando haces un commit nuevo, ese nombre se mueve solo hacia adelante y apunta al recién creado. Por eso crear una rama es instantáneo aunque el proyecto pese dos gigas: no se copia nada, se escribe un nombre y un identificador.

Y de ahí sale la respuesta a la primera sorpresa: al cambiar de rama, los archivos de tu carpeta cambian. No se borró nada -Git está reescribiendo la carpeta para que se vea como el commit al que apunta esa otra rama-. Al volver, todo reaparece.

Crear una rama y moverte a ella
# Ver en que rama estas y cuales existen
git branch

# Crear una rama nueva y saltar a ella, en un solo comando
git switch -c formato-nuevo

# Volver a la principal
git switch main
Resultado
* main

Switched to a new branch 'formato-nuevo'

Switched to branch 'main'

Si buscas ayuda en internet vas a ver git checkout para esto. Funciona, pero checkout hace demasiadas cosas distintas -cambia de rama, y también descarta cambios de un archivo-, y ahí es donde la gente borra trabajo sin querer.

Por eso Git separó ese comando en dos: git switch para moverse entre ramas y git restore para deshacer archivos. Al escribirse esta lección, la documentación oficial de git switch ya no lo marca como experimental, aunque muchos tutoriales sigan diciéndolo.

El ciclo completo de una rama

  1. Salir de la rama principal

    git switch -c formato-nuevo

    La rama nace apuntando al mismo commit donde estabas, así que empiezas exactamente con lo que había.

  2. Trabajar normal

    git add y git commit las veces que haga falta. Puedes hacer diez commits, incluso alguno que deje las cosas a medias: nadie más los ve todavía.

  3. Comprobar que la principal sigue intacta

    git switch main y mira la carpeta: está como la dejaste. Ese es el momento en que se entiende para qué sirven las ramas.

  4. Juntar el trabajo, si se aprobó

    Desde main: git merge formato-nuevo. Traes a la principal todos los commits de la otra.

    La fusión y sus conflictos son la lección 7.

  5. Borrar la rama que ya cumplió

    git branch -d formato-nuevo

    No se pierde nada: los commits ya están en main. Lo que se borra es el nombre. Un repositorio con treinta ramas viejas no se puede leer.

Ver el dibujo de lo que está pasando
git log --oneline --graph --all
Resultado
* 5b1d7c4 (formato-nuevo) feat: encabezado con logo en la cotizacion
* 2a9e3f8 feat: nueva estructura de la cotizacion
| * a91c4e2 (HEAD -> main) fix: el domicilio se cobra aparte
|/
* 4c5e0a9 feat: plantilla de cotizacion de hardware

Ese HEAD -> que aparece delante de una rama significa «aquí estás parado ahora mismo». Es la forma que tiene Git de decirte en qué rama trabajas, y aparece en muchos mensajes.

Cuántas ramas, y para qué

Trabajando solo, un patrón basta: la rama principal siempre funciona, y cada cosa que se prueba nace en su propia rama.

En equipo se suele añadir un camino intermedio, para que lo que llega a producción haya pasado por pruebas. Este es un flujo real, el que usamos nosotros; hay otros y todos se apoyan en la misma idea.

Un flujo de ramas de verdad

feature/lo-que-sea

Una rama por cada cosa nueva. Nace de la rama de integración y muere cuando su trabajo se juntó.

Nombres descriptivos: feature/cotizacion-por-zonas, no feature/cambios.

dev

Donde se juntan todas las funcionalidades en marcha. Es la rama de trabajo diario del equipo.

Puede romperse un rato: para eso está.

uat

Lo que está en pruebas, esperando que alguien lo valide. Se congela mientras se revisa.

UAT es pruebas de aceptación del usuario: quien va a usarlo dice si sirve.

prod y main

prod es lo aprobado, listo para publicarse. main guarda lo certificado.

Nadie trabaja directamente en ellas: solo reciben fusiones.

Lo que va a pasarte al empezar con ramas

Hice commits en main sin querer

Pasa siempre al principio, porque git status lo dice en la primera línea y nadie la lee.

Tiene arreglo y se ve en la lección 5: se crea la rama donde debía estar el trabajo y se retrocede main. Mientras tanto, coge el hábito de mirar la primera línea de git status antes de empezar.

No me deja cambiar de rama

El mensaje dice «Your local changes would be overwritten»: tienes cambios sin guardar que se perderían al reescribir la carpeta.

Tres salidas: hacer commit, guardarlos aparte con git stash (lección 8), o descartarlos si no valen nada.

¿Cuánto puede durar abierta una rama?

Lo menos posible. Una rama que vive tres meses acumula tantas diferencias que fusionarla se vuelve un día entero de conflictos.

Es preferible trocear el trabajo en varias ramas cortas que sostener una grande y eterna.

Me pide que borre una rama con -D en mayúscula

git branch -d (minúscula) se niega a borrar una rama cuyo trabajo no se ha juntado en ningún sitio: te está protegiendo.

-D lo fuerza. Úsalo solo cuando de verdad quieras tirar esos commits.

Cada comando con lo suyo

Arrastra cada comando a lo que hace, o toca uno y luego su espacio.

  1. Lista las ramas que existen y marca con un asterisco en cuál estás.
  2. Crea una rama nueva y te mueve a ella en un solo paso.
  3. Te devuelve a la rama principal y reescribe la carpeta para que se vea como ella.
  4. Trae a la rama en la que estás los commits de otra.
  5. Borra el nombre de una rama cuyo trabajo ya se juntó en otro sitio.

Compruébalo tú mismo

Creas una rama en un proyecto de 2 GB. ¿Cuánto tarda y cuánto ocupa?

Cambias a otra rama y varios archivos desaparecen de la carpeta. ¿Qué pasó?

¿Por qué no se trabaja directamente sobre la rama principal?

Lo que sigue

Ya sabes abrir líneas de trabajo paralelas. Ahora toca la lección que más se consulta de todo el curso: cómo deshacer. Los cuatro escenarios de arrepentimiento y el comando exacto de cada uno -incluido el que no debes usar sobre algo que ya compartiste.

Siguiente: Deshacer sin romper nada

Continuar ← Leer el historial