Git y GitHub Tema 3
Avanzado: ramas y conflictos
Con lo de los temas anteriores tienes de sobra para tu proyecto. Esto es para cuando quieras ir un paso más allá, o trabajes en equipo: aquí solo se cuenta por encima.
Ramas#
Una rama es una línea de trabajo aparte. La principal se llama main. Si quieres probar algo sin arriesgar lo que ya funciona (una pantalla nueva, un cambio grande…), creas una rama, trabajas en ella, y cuando está listo la juntas con main.
| Comando | Qué hace |
|---|---|
git branch | Lista las ramas, y marca con * en la que estás |
git switch -c nueva-pantalla | Crea la rama nueva-pantalla y se cambia a ella |
git switch main | Vuelve a la rama main |
git merge nueva-pantalla | Junta los cambios de nueva-pantalla con la rama en la que estás |
git push origin nueva-pantalla | Sube la rama a GitHub |
El orden habitual:
git switch -c nueva-pantalla # crear la rama
# ... trabajar, add y commit las veces que haga falta ...
git switch main # volver a main
git merge nueva-pantalla # juntar
git push origin mainPull requests#
En un equipo, en vez de hacer el merge directamente, se sube la rama a GitHub y se abre una pull request (PR): una petición para juntarla con main. Así el resto del equipo puede revisar los cambios y comentarlos antes de aceptarlos. Se hace desde la web de GitHub, con el botón Compare & pull request que aparece al subir una rama.
Conflictos#
Un conflicto aparece cuando dos personas (o tú desde dos ordenadores) cambiáis las mismas líneas del mismo archivo, y Git no sabe con cuál quedarse. Al hacer pull (o merge), avisa así:
Auto-merging notas.txt
CONFLICT (content): Merge conflict in notas.txt
Automatic merge failed; fix conflicts and then commit the result.Y en el archivo marca las dos versiones:
linea 1
<<<<<<< HEAD
linea desde el aula
=======
linea desde casa
>>>>>>> ab6908c75b721a54fe27ea1d8264d7af9ec43694| Marca | Qué hay |
|---|---|
Entre <<<<<<< HEAD y ======= | Tu versión |
Entre ======= y >>>>>>> | La que llega de GitHub (o de la otra rama) |
Para resolverlo:
- Deja el archivo como tiene que quedar: con una versión, con la otra o con las dos. Borra las tres líneas de marcas. VS Code te ayuda con los botones Aceptar cambio actual, Aceptar cambio entrante o Aceptar ambos cambios.
- Guarda el archivo.
git add .,git commit -m "Resuelve el conflicto de notas.txt"ygit push origin main.
Para evitarlos: pull antes de empezar, commits pequeños, y en equipo, que cada uno trabaje en archivos distintos.
Fork#
Un fork es una copia de un repositorio de otra persona en tu cuenta de GitHub. Se usa para contribuir a proyectos de software libre: haces fork, trabajas en tu copia y propones el cambio al original con una pull request.
Errores frecuentes#
| Mensaje o síntoma | Qué significa | Cómo se arregla |
|---|---|---|
CONFLICT (content): Merge conflict in … | Dos versiones distintas de las mismas líneas | Resuélvelo como se explica arriba |
You have unmerged paths en git status | Hay un conflicto a medio resolver | Termina de arreglar los archivos marcados y haz add y commit. Para abandonar y volver a como estabas: git merge --abort |
El programa no compila después de un merge | Se han quedado marcas <<<<<<< en algún archivo | Búscalas y bórralas |
| Tus cambios «han desaparecido» | Estás en otra rama | Mira en cuál estás con git branch y vuelve con git switch |