Explorador
Chuleta

Ramas, merge y rebase

Crear y cambiar de rama, integrar cambios con merge o rebase y resolver conflictos.

Actualizado el

En esta guía

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 main no avanzó desde que nació feature, el puntero de main simplemente 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
  1. git status lista los archivos en conflicto.
  2. Editar cada archivo, dejar el contenido correcto y borrar las tres marcas.
  3. git add archivo para marcarlo como resuelto.
  4. Terminar con git commit (en un merge) o git 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