Una rama (branch) es una línea de trabajo paralela. Te permite hacer cambios
sin tocar la versión que funciona.
La idea: el proyecto tiene una rama principal, llamada main, que siempre debe
funcionar. Cuando vas a agregar algo nuevo, creas una rama aparte, trabajas ahí, y
cuando está listo lo fusionas (merge) de vuelta a main.
gitGraph
commit id: "Sitio base"
commit id: "Agrega el menú"
branch formulario
checkout formulario
commit id: "HTML del formulario"
commit id: "Valida los campos"
checkout main
commit id: "Corrige el footer"
merge formulario id: "Integra formulario"
commit id: "Ajustes finales"
Fíjate en lo que permite: mientras alguien construye el formulario en su rama, en
main se sigue corrigiendo el footer. Ninguno rompe el trabajo del otro, y al final
ambas líneas se unen.
Para qué sirven
Probar sin romper. Si el experimento sale mal, borras la rama y main quedó intacta.
Trabajar en grupo. Cada persona en su rama, sin pisarse.
Mantener main funcionando. Lo que está en main siempre se puede mostrar o entregar.
Comandos
Ver las ramas
git branch
Lista las ramas locales y marca con * la actual.
Crear una rama y cambiarse a ella
git switch -c formulario
La -c es de create. Este comando crea la rama y te cambia a ella en un solo paso.
También verás git checkout -b
git checkout -b formulario hace exactamente lo mismo. switch es el comando
moderno, introducido porque checkout hacía demasiadas cosas distintas y
confundía. Ambos funcionan.
Cambiar de rama
git switch maingit switch formulario
Los archivos de tu carpeta cambian al hacerlo: Git reemplaza el contenido por el
de la rama a la que te cambias.
Haz commit antes de cambiarte
Si tienes cambios sin confirmar, Git puede negarse a cambiar de rama o arrastrarlos
a la otra. Deja siempre la rama limpia (git status sin cambios pendientes) antes
de moverte.
Subir una rama nueva a GitHub
La primera vez que subes una rama que no existe en el remoto:
git push -u origin formulario
El -u deja la rama vinculada, y desde entonces basta con git push.
Fusionar (merge)
Para integrar el trabajo de una rama en main, primero te cambias a main y luego
fusionas:
El git pull antes del merge trae lo que otros hayan subido, y reduce las
posibilidades de conflicto.
Borrar una rama ya fusionada
git branch -d formulario
Conflictos de fusión
Un conflicto ocurre cuando dos ramas modificaron la misma línea del mismo
archivo, y Git no puede decidir cuál vale.
Git marca el archivo así:
<<<<<<< HEAD
<h1>Bienvenidos a nuestro sitio</h1>
=======
<h1>Bienvenido</h1>
>>>>>>> formulario
Marca
Qué significa
<<<<<<< HEAD
Desde aquí, la versión de tu rama actual
=======
Separador
>>>>>>> formulario
Hasta aquí, la versión de la rama que fusionas
Cómo se resuelve
Abre el archivo. VSCode resalta el conflicto y ofrece botones
(Accept Current Change, Accept Incoming, Accept Both).
Decide cuál texto queda. Puede ser uno, el otro, o una mezcla escrita por ti.
Borra las tres líneas de marcas (<<<<<<<, =======, >>>>>>>).
Guarda, y luego:
git add .git commit -m "Resuelve conflicto en el titulo"git push
Si las marcas quedan en el archivo, el sitio se rompe
<<<<<<< HEAD no es HTML válido y aparecerá impreso en la página. Antes de hacer
commit, revisa con git diff que no quedó ninguna marca.
Un conflicto no es un error
Es Git avisando que necesita una decisión humana. Es completamente normal al
trabajar en grupo, y por eso lo vas a practicar en el
ejercicio en parejas.
Checkpoint
Intenta responder antes de desplegar cada pregunta.
¿Qué es una rama y para qué sirve?
Una línea de trabajo paralela. Permite hacer cambios sin tocar la versión que
funciona: creas una rama, trabajas ahí, y cuando está lista la fusionas de vuelta a
main. Sirve para probar sin romper, para que varias personas trabajen sin
pisarse, y para que main siempre se pueda mostrar o entregar.
¿Qué comando crea una rama y se cambia a ella?
git switch -c formulario
La -c es de create: crea la rama y te cambia a ella en un solo paso. También
verás la forma antigua git checkout -b formulario, que hace lo mismo.
¿Cuál es la secuencia completa para fusionar una rama en main?
El git pull antes del merge trae lo que otros hayan subido y reduce las
posibilidades de conflicto.
¿Cuándo se produce un conflicto?
Cuando dos ramas modificaron la misma línea del mismo archivo y Git no puede
decidir cuál vale. Si cada uno tocó archivos distintos, o líneas distintas del
mismo archivo, Git fusiona solo y no hay conflicto.
¿Qué hay que hacer con las marcas <<<<<<< y ======= antes del commit?
Borrarlas, las tres líneas (<<<<<<< HEAD, ======= y >>>>>>> rama), una
vez decidido qué texto queda. No son HTML ni código válido: si quedan en el
archivo, aparecerán impresas en la página. Conviene revisar con git diff antes de
hacer commit.