Crear y cambiar de rama
| Comando | Qué hace |
|---|---|
git branch |
Lista las ramas locales |
git branch -a |
Incluye las remotas |
git switch feature |
Cambia a una rama existente |
git switch -c feature |
Crea la rama y cambia a ella |
git switch - |
Vuelve a la rama anterior |
git branch -m nuevo-nombre |
Renombra la rama actual |
git branch -d feature |
Borra una rama ya integrada |
git branch -D feature |
La borra aunque no esté integrada |
git checkout hace lo mismo que git switch y git restore juntos. Sigue funcionando, pero los dos comandos nuevos son más claros.
Integrar con merge
git switch main
git merge feature
Hay dos resultados posibles:
- Fast-forward: si
mainno avanzó desde que naciófeature, el puntero demainsimplemente se mueve hacia adelante. No se crea ningún commit nuevo. - Merge commit: si las dos ramas avanzaron, Git crea un commit con dos padres que une ambas historias.
Antes Después de git merge feature
A ── B ── C main A ── B ── C ──── M main
\ \ /
D ── E feature D ── E feature
Integrar con rebase
git switch feature
git rebase main
Rebase vuelve a aplicar los commits de feature encima de la punta de main. El historial queda en línea recta, pero los commits son nuevos (cambian de hash).
Antes Después de git rebase main
A ── B ── C main A ── B ── C main
\ \
D ── E feature D' ── E' feature
No se hace rebase de commits que ya se subieron a una rama compartida. Reescribe el historial y rompe el trabajo de quien ya los tenga.
Merge o rebase
| Merge | Rebase | |
|---|---|---|
| Historial | Conserva la bifurcación real | Lineal y más fácil de leer |
| Commits | No cambian | Se reescriben |
| Cuándo | Integrar una rama terminada en main |
Poner al día una rama propia antes de integrarla |
Resolver conflictos
Un conflicto aparece cuando dos ramas cambiaron las mismas líneas. Git marca el archivo así:
<<<<<<< HEAD
lo que hay en la rama actual
=======
lo que viene de la otra rama
>>>>>>> feature
git statuslista los archivos en conflicto.- Editar cada archivo, dejar el contenido correcto y borrar las tres marcas.
git add archivopara marcarlo como resuelto.- Terminar con
git commit(en un merge) ogit rebase --continue(en un rebase).
Para cancelar y volver al estado anterior:
git merge --abort
git rebase --abort
Traer un solo commit
git cherry-pick <hash> # aplica ese commit sobre la rama actual