Ramas en Git


Estás a mitad de camino construyendo weather-app, y quieres probar agregar una función de pronóstico de cinco días. Puede que necesites varios commits para lograrlo bien, y hasta que lo consigas, no quieres que código a medio terminar quede junto a la app que ya funciona para todos los que la usan. Una rama es la manera en que Git resuelve esto: una línea de trabajo separada donde vive el experimento, mientras main sigue funcionando exactamente como antes de que empezaras.
Qué es en realidad una rama
Aquí la tienes en acción:
$ git branch forecast
$ git switch forecast
Switched to branch 'forecast'Dos comandos: el primero crea una nueva rama llamada forecast, el segundo te mueve a ella. Desde este punto, cada commit que hagas queda en forecast mientras main se mantiene exactamente donde está.
Una rama es una etiqueta movible que apunta a un commit. En este momento, main y forecast apuntan ambas al mismo commit, el que estabas parado sobre cuando ejecutaste git branch forecast. En el instante en que hagas otro commit estando en forecast, esa etiqueta avanza al nuevo commit. main se mantiene exactamente donde estaba hasta que cambies a ella y hagas un commit ahí tú mismo.
Puedes ver ambas etiquetas con git branch:
$ git branch
forecast
* mainEl asterisco marca la rama en la que estás actualmente. Una rama es solo un nombre que apunta a un commit. Ese es todo el mecanismo. Todo lo demás en este capítulo es una variación de mover esas etiquetas de un lado a otro.
git branch forecast crea una nueva etiqueta que apunta a tu commit actual, y git switch forecast te mueve a ella. Nada de tus archivos cambia hasta que realmente hagas un commit ahí. Me gusta imaginar las ramas como notas adhesivas sobre un commit: baratas de agregar, baratas de mover, baratas de despegar cuando terminas. Crear y cambiar entre ramas
git branch forecast por sí solo crea la etiqueta sin moverte a ella. La mayoría de las veces quieres ambas cosas a la vez, así que git switch tiene un atajo:
$ git switch -c forecast
Switched to a new branch 'forecast'-c significa "create" (crear). git switch -c crea la rama y te mueve a ella al mismo tiempo. Ese único comando es al que recurrirás casi siempre que empieces un trabajo nuevo.
Cambiar de rama cambia qué instantánea muestran tus archivos. Pruébalo: la línea echo de abajo es una forma rápida de crear un nuevo archivo, src/forecast.js, con una sola línea de contenido, y todo lo demás son comandos que ya conoces:
$ git switch forecast
$ echo "// lógica del pronóstico de cinco días" > src/forecast.js
$ git add src/forecast.js
$ git commit -m "Start forecast module"
$ ls src
forecast.js index.js
$ git switch main
Switched to branch 'main'
$ ls src
index.jsEl archivo no ha desaparecido. Vive en la rama forecast, y la instantánea de la rama main nunca lo incluyó. Cambia de vuelta a forecast y reaparece exactamente como lo dejaste.
git switch -c forecast crea una rama y te mueve a ella en un solo paso, que es lo que usarás casi siempre. Cambiar de rama intercambia qué versión de tus archivos ves, así que un archivo agregado en una rama está ausente en otra hasta que vuelvas a cambiar. No se pierde nada, queda guardado en la otra rama. HEAD y HEAD desacoplado
Git registra en qué punto estás en este momento con un marcador llamado HEAD. Normalmente HEAD apunta a tu rama actual, y esa rama apunta a un commit, así que HEAD se mueve automáticamente cada vez que cambias de rama o haces un commit. Si haces checkout a un commit específico usando su hash, o a un tag (una etiqueta fija anclada a un solo commit, que a menudo marca una versión de lanzamiento), en lugar de un nombre de rama, HEAD se adjunta directamente a ese commit en vez de a una etiqueta de rama. A este estado se le llama HEAD desacoplado.
Puedes mirar libremente ahí, e incluso puedes hacer commits, pero nada apunta a esos nuevos commits por nombre. Si cambias a una rama sin haber creado una primero, esos commits se vuelven difíciles de encontrar de nuevo.
$ git switch a1b2c3d
HEAD is now at a1b2c3d Add password strength meterEse mensaje, "HEAD is now at" ("HEAD ahora está en"), es la forma en que Git te dice que has salido del territorio de las ramas y que HEAD quedó adjunto a un único commit.
Hacia dónde va esto
Ya has creado ramas, te has movido entre ellas, y has visto cómo main permanece intacta mientras experimentas en otro lado. La siguiente pregunta es cómo el trabajo hecho en una rama vuelve a main, que es exactamente lo que cubre Fusiones y conflictos. Si quieres repasar cómo leer el historial de commits antes de seguir, Historial recorre git log, git show y git diff.

