¿Qué son las ramas?

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 main
git 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:

git switch main
git pull
git merge formulario
git push

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
MarcaQué significa
<<<<<<< HEADDesde aquí, la versión de tu rama actual
=======Separador
>>>>>>> formularioHasta aquí, la versión de la rama que fusionas

Cómo se resuelve

  1. Abre el archivo. VSCode resalta el conflicto y ofrece botones (Accept Current Change, Accept Incoming, Accept Both).
  2. Decide cuál texto queda. Puede ser uno, el otro, o una mezcla escrita por ti.
  3. Borra las tres líneas de marcas (<<<<<<<, =======, >>>>>>>).
  4. 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.