Ramas en Git


Estás a mitad de camino construyendo weather-app y quieres intentar agregar una función de pronóstico de cinco días. Podría tomar varios commits para hacerlo bien, y hasta que no lo logres, no quieres código a medio terminar sentado junto a la aplicación que ya funciona para todos los que la usan. Una rama es cómo Git resuelve esto: una línea de trabajo separada donde el experimento vive, mientras que main sigue funcionando exactamente como lo hacía antes de que comenzaras.
Qué es realmente una rama
Aquí está 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 aquí, cada commit que hagas aterriza en forecast mientras main se queda exactamente donde está.
Una rama es una etiqueta movible que apunta a un commit. Ahora mismo, main y forecast apuntan al mismo commit, el que estabas ocupando cuando ejecutaste git branch forecast. En el momento en que commits nuevamente mientras estés en forecast, esa etiqueta se mueve hacia adelante al nuevo commit. main se queda exactamente donde estaba hasta que cambies a ella y hagas commit allí tú mismo.
Puedes ver ambas etiquetas con git branch:
$ git branch
forecast
* mainEl asterisco marca la rama en la que te encuentras 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.
git branch forecast crea una nueva etiqueta que apunta a tu commit actual, y git switch forecast te mueve a ella. Nada sobre tus archivos cambia hasta que realmente hagas commit allí. Me gusta imaginar las ramas como notas adhesivas en 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 allí. 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 y te mueve a una rama. Ese comando único es el que usarás casi cada vez que comiences un nuevo trabajo.
Cambiar ramas cambia qué snapshot tus archivos muestran. Pruébalo: la línea echo a continuación es una forma de un paso para crear un nuevo archivo, src/forecast.js, con una única línea en él, y todo lo demás son comandos que ya conoces:
$ git switch forecast
$ echo "// lógica de 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 el snapshot de la rama main nunca lo incluyó. Cambia de nuevo a forecast y reaparece exactamente como lo dejaste.
git switch -c forecast crea una rama y te mueve a ella en un paso, que es lo que usarás casi cada vez. Cambiar ramas intercambia qué versión de tus archivos ves, así que un archivo agregado en una rama está ausente en otra hasta que cambies de vuelta. Nada se pierde, está estacionado en la otra rama. HEAD y HEAD separado
Git mantiene un registro de dónde estás actualmente 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 o haces commit. Si accedes a un commit específico por su hash, o una etiqueta (una etiqueta fija fijada a un commit, a menudo marcando un lanzamiento), en lugar de un nombre de rama, HEAD se une directamente a ese commit en lugar de a una etiqueta de rama. Este estado se llama HEAD separado.
Puedes mirar alrededor libremente allí, e incluso puedes hacer commit, pero nada apunta a esos nuevos commits por nombre. Si cambias a una rama sin crear una primero, 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", es Git diciéndote que has dejado el territorio de rama y has unido HEAD a un único commit.
Hacia dónde lleva esto
Ya has creado ramas, te has movido entre ellas, y has visto cómo main se mantiene intacta mientras experimentas en otro lugar. La siguiente pregunta es cómo el trabajo en una rama vuelve a main, que es exactamente lo que Fusionando y conflictos cubre. Si quieres un repaso sobre cómo leer el historial de commits antes de continuar, Historial recorre git log, git show, y git diff.

