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.
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.
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.
# 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* 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.
git switch -c formato-nuevo
La rama nace apuntando al mismo commit donde estabas, así que empiezas exactamente con lo que había.
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.
git switch main y mira la carpeta: está como la
dejaste. Ese es el momento en que se entiende para qué sirven las
ramas.
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.
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.
git log --oneline --graph --all* 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.
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.
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.
Donde se juntan todas las funcionalidades en marcha. Es la rama de trabajo diario del equipo.
Puede romperse un rato: para eso está.
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 es lo aprobado, listo para publicarse.
main guarda lo certificado.
Nadie trabaja directamente en ellas: solo reciben fusiones.
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.
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.
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.
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.
Arrastra cada comando a lo que hace, o toca uno y luego su espacio.
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?
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