Skip to main content

Acerca del rebase de Git

El comando te permite cambiar fácilmente una serie de confirmaciones, modificando el historial de tu repositorio. Puedes reordenar, editar o combinar confirmaciones.

Normalmente, se usaría para lo siguiente:

  • Editar mensajes de confirmación previos.
  • Combinar varios commits en uno.
  • Eliminar o revertir confirmaciones que ya no son necesarias.

Advertencia

Dado que cambiar el historial de confirmaciones puede dificultar las cosas para todos los que usan el repositorio, se considera una mala práctica rebasear las confirmaciones cuando ya las has enviado a un repositorio. Para aprender a rebasar de forma segura, consulta AUTOTITLE.

Cambiar de base las confirmaciones con una rama

Para hacer rebase de todos los commits entre la otra rama y el estado actual de la rama, puede escribir el siguiente comando en su terminal (ya sea el símbolo del sistema para Windows o la terminal para Mac y Linux):

git rebase --interactive OTHER-BRANCH-NAME

Cambiar de base las confirmaciones en un momento específico

Para rebasear los últimos commits en tu rama actual, puedes introducir el siguiente comando en el shell.

git rebase --interactive HEAD~7

Comandos disponibles mientras se reorganiza la base

Hay seis comandos disponibles mientras se rebasea.

pick
simplemente significa que se incluye la confirmación. Al reordenar los comandos, se cambia el orden de las confirmaciones cuando la actualización de base está en curso. Si eliges no incluir una confirmación, debes eliminar la línea completa.
reword
El comando es similar a , pero después de usarlo, la fusión mediante cambio de base se pausará y le dará la oportunidad de modificar el mensaje de confirmación. Los cambios realizados por el commit no se ven afectados.
edit
Si elige modificar una confirmación, se le dará la oportunidad de enmendar la confirmación, lo que significa que puede agregar a la confirmación o cambiarla por completo. También puedes realizar más confirmaciones antes de continuar con el cambio de base. Esto te permite dividir una confirmación grande en otras más pequeñas o eliminar cambios erróneos hechos en una confirmación.
squash
Este comando te permite combinar dos o más confirmaciones en una única confirmación. Un commit se combina en el commit anterior. Git te da la oportunidad de escribir un mensaje de confirmación nuevo describiendo ambos cambios.
fixup
Esto es similar a , pero el commit que se va a fusionar tiene su mensaje descartado. La confirmación simplemente se fusiona en la confirmación de arriba y el mensaje de la confirmación anterior se usa para describir ambos cambios.
exec
Esto te permite ejecutar comandos shell arbitrarios contra un commit.

Un ejemplo de cómo usar

Independientemente del comando que use, Git iniciará el editor de texto predeterminado y abrirá un archivo que detalla las confirmaciones en el intervalo que haya elegido. Ese archivo se ve así:

pick 1fc6c95 Patch A
pick 6b2481b Patch B
pick dd1475d something I want to split
pick c619268 A fix for Patch B
pick fa39187 something to add to patch A
pick 4ca2acc i cant' typ goods
pick 7b36971 something to move before patch B

# Rebase 41a72e6..7b36971 onto 41a72e6
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Desglosando esta información, de principio a fin, vemos que:

  • Se enumeran siete confirmaciones, lo que indica que hubo siete cambios entre nuestro punto de partida y el estado de nuestra rama actual.
  • Los commits que eliges rebasar se clasifican en el orden de los cambios más antiguos (en la parte superior) a los cambios más nuevos (en la parte inferior).
  • Cada línea muestra un comando (de manera predeterminada, ), el SHA de confirmación y el mensaje de confirmación. Todo el procedimiento se centra en la manipulación de estas tres columnas. Los cambios que realices se hacen rebase sobre tu repositorio.
  • Después de las confirmaciones, Git le indica el intervalo de confirmaciones con las que estamos trabajando ().
  • Finalmente, Git te ayuda diciéndote los comandos que están disponibles cuando rebasas confirmaciones.

Información adicional

  • AUTOTITLE
  • El capítulo "Creación de ramas en Git" del libro Pro Git
  • El capítulo "Rebase interactivo" del libro Pro Git
  • Confirmaciones de compactación con rebase
  • AUTOTITLE en la documentación de GitHub Desktop