Sinopsis
git rebase [-i] [--onto <newbase>] [<upstream> [<branch>]]
Descripción
El comando git rebase mueve una secuencia de commits a una nueva base. Reescribe el historial reproduciendo cada commit sobre la nueva base, produciendo una cadena lineal en lugar de un merge commit. Rebasear es invaluable para mantener branches feature actualizados, limpiar el historial local antes de pushear y squashear commits fixup.
Como rebase crea nuevos commits con SHAs diferentes, nunca rebasees commits que han sido publicados y descargados por otros: terminarán con historiales divergentes. El modo interactivo (-i) te permite reordenar, editar, squashear, descartar o arreglar commits.
En el uso diario, git rebase se integra con alias de shell. Para depurar, ejecuta con GIT_TRACE=1.
Entender cómo git rebase interactúa con el modelo de datos de Git rinde dividendos. La mayoría de problemas con Git provienen de comportamiento predeterminado sorprendente o de reescribir historial que ya se compartió.
Opciones comunes
| Opción | Descripción |
|---|---|
-i, --interactive | Abre un editor para manipular la lista de commits. |
--onto <newbase> | Rebasea sobre un commit arbitrario, no sobre el upstream. |
--continue | Reanuda tras resolver conflictos. |
--abort | Cancela el rebase y vuelve al estado original. |
--skip | Salta el patch actual y continúa. |
--autosquash | Ordena automáticamente commits fixup/squash. |
--autostash | Stashea cambios locales antes de rebasear y los reaplica después. |
-r, --rebase-merges | Preserva merge commits durante rebase. |
Ejemplos
git rebase main
# Reproduce los commits del branch actual encima de main
git rebase -i HEAD~5
# Edita interactivamente los últimos 5 commits
git rebase --onto main feature-base feature-tip
# Mueve solo los commits entre feature-base y feature-tip a main
git rebase --continue
# Reanuda tras arreglar conflictos
Errores comunes
Rebasear branches públicos compartidos rompe el historial de cada colaborador. Reserva rebase para limpieza local. Durante la resolución de conflictos, los principiantes a menudo ejecutan git commit en lugar de git rebase --continue, dejando el rebase en un estado roto. Si te pierdes a mitad de un rebase, git rebase --abort siempre te devuelve a un estado seguro.
Comandos relacionados
git merge, git cherry-pick, git reflog, git pull --rebase