Una rama es un puntero movible a un commit. Crearla no copia tus archivos: solo agrega un nombre que avanza con cada commit nuevo. git switch -c feat/login la crea y te pasa a ella; git switch main vuelve. git branch las lista.
Una rama por cada pieza de trabajo. Aísla el cambio para revisarlo por separado, deja que dos trabajos avancen sin pisarse y, si sale mal, se descarta con git branch -D sin tocar main (los commits quedan sin rama que los señale). Con -d, Git se niega a borrar una rama que todavía no se mergeó.
Merge. Si main no avanzó, Git solo mueve el puntero (fast-forward). Si avanzó, git merge crea un commit con dos padres. Si las dos ramas cambiaron las mismas líneas, Git marca un conflicto: deja en el archivo <<<<<<< (tu versión), ======= y >>>>>>> (la de la rama entrante) y te pide que elijas.
Resolver. Editás el archivo, borrás las marcas, corrés git add y cerrás con git commit (o git merge --continue). Si te perdés, git merge --abort cancela el merge mientras siga en curso: conviene empezarlo con el árbol limpio.
Rebase. Reaplica tus commits sobre otra base, pero crea commits nuevos con hashes nuevos. Por eso no conviene usarlo sobre commits que otras personas ya bajaron.
Tres ideas para llevarte:
- Una tarea, una rama.
- Un conflicto es una decisión pendiente, no una falla.
git merge --abortcancela un merge en curso.