Git Rebase
Última actualización
git rebase mueve los commits de tu rama para que se reproduzcan encima de otra rama, generando un historial recto y lineal en lugar de un commit de fusión. El rebase interactivo (-i) va más allá, permitiéndote combinar, reordenar, editar o descartar commits. Como el rebasing reescribe los commits, hazlo solo en trabajo que aún no has compartido.
Prueba esto en el terminal playground: una shell real en tu navegador, sin nada que instalar.
Sintaxis
| Command | What it does |
|---|---|
git rebase main | Reproduce tus commits encima de main |
git rebase -i HEAD~3 | Edita interactivamente los últimos 3 commits |
git rebase --onto main old new | Mueve un rango de commits sobre main |
git rebase --continue | Reanuda tras resolver conflictos |
git rebase --abort | Cancela el rebase y restaura la rama |
git pull --rebase | Hace pull y rebase en lugar de merge |
Palabras clave del rebase interactivo
En el editor que abre -i, cambia pick por una de estas.
| Keyword | What it does |
|---|---|
pick | Conserva el commit |
reword | Conserva el commit y edita su mensaje |
squash | Fusiona con el commit anterior y combina los mensajes |
fixup | Fusiona pero descarta este mensaje |
drop | Elimina el commit por completo |
Preguntas frecuentes sobre git rebase
¿Qué hace git rebase?
Toma los commits de tu rama actual y los reproduce uno a uno encima de otra rama, como si hubieras empezado tu trabajo desde el último commit de esa rama. El resultado es un historial lineal sin commit de fusión. Los commits se reescriben (obtienen nuevos hashes) en el proceso.
¿Qué es el rebase interactivo?
git rebase -i <base> abre un editor que lista los commits desde <base>, donde puedes reordenarlos, hacer squash de varios en uno, hacer reword de los mensajes, hacer edit de un commit o drop para descartarlo. Es la herramienta principal para limpiar una serie desordenada de commits antes de compartirlos.¿Cuál es la regla de oro del rebasing?
Nunca hagas rebase de commits en los que otros ya han basado su trabajo, normalmente todo lo que se ha subido a una rama compartida. Como el rebase reescribe los commits, hacerlo obliga a todos los demás a reconciliar un historial divergente. Haz rebase libremente en commits locales sin subir; usa merge o revert para los públicos.
¿Cómo arreglo o cancelo un rebase con conflictos?
Cuando un rebase se detiene por un conflicto, resuelve los archivos, hazles
git add y luego ejecuta git rebase --continue. Usa git rebase --skip para descartar el commit actual, o git rebase --abort para cancelar por completo y devolver la rama a como estaba antes de iniciar el rebase.¿Puedo practicar esto en línea?
Sí. Abre el terminal playground para ejecutar
git rebase en una shell real en tu navegador, sin nada que instalar. El curso interactivo y gratuito de Git de Coddy también cubre el rebasing paso a paso.