2.1 Ramas, fusiones y stash¶
Una rama es una línea de trabajo independiente. Permite probar algo nuevo sin tocar main hasta que esté listo.
main: A --- B --------- M
\ /
rama: C --- D
Crear y cambiar de rama¶
git status # comprueba que el árbol está limpio
git switch -c nueva-funcion # crea la rama y se cambia a ella
git branch # lista las ramas (la actual lleva *)
git switch main # vuelve a main
Los archivos creados en una rama no aparecen en la otra hasta que las fusionas.
Fusionar (merge)¶
Para traer a main el trabajo de nueva-funcion:
git switch main
git merge nueva-funcion
git log --oneline --graph --all
git branch -d nueva-funcion # borra la rama ya fusionada
Conflictos¶
Si las dos ramas cambiaron la misma parte de un archivo, Git no sabe cuál elegir y marca el conflicto dentro del archivo:
<<<<<<< HEAD
versión de main
=======
versión de la otra rama
>>>>>>> nueva-funcion
Para resolverlo:
- Abre el archivo y decide qué contenido queda. Borra las marcas
<<<<<<<,=======y>>>>>>>. git add archivopara marcarlo como resuelto.git commitpara terminar la fusión.
Si prefieres cancelar la fusión antes de resolverla:
git merge --abort
No borres cambios a ciegas
Lee las dos versiones. A veces hay que quedarse con partes de ambas.
Guardar cambios a medias: stash¶
Si tienes cambios sin terminar y necesitas cambiar de rama o limpiar el directorio:
git stash push -m "trabajo a medias" # guarda y deja el directorio limpio
git stash list # lista lo guardado
git stash apply # recupera los cambios (los deja guardados)
git stash pop # recupera y borra el guardado
cambios sin confirmar -> git stash push -> directorio limpio -> otra tarea -> git stash pop -> sigo donde lo dejé