Normalmente, se usaría git rebase
para lo siguiente:
- Editar mensajes de confirmación previos.
- Combinar varias confirmaciones en una.
- Eliminar o revertir confirmaciones que ya no son necesarias.
Warning
Puesto que cambiar el historial de confirmaciones puede dificultar las cosas para todos los que usan el repositorio, se considera una mala práctica fusionar mediante cambio de base las confirmaciones cuando ya las has insertado en un repositorio. Para obtener información sobre cómo fusionar mediante cambio de base de forma segura, consulta Acerca de las fusiones de las solicitudes de extracción.
Cambiar de base las confirmaciones con una rama
Para cambiar de base todas las confirmaciones entre otra rama y el estado de rama actual, puedes ingresar el siguiente comando en tu shell (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 cambiar de base las últimas confirmaciones en tu rama actual, puedes ingresar el siguiente comando en tu shell:
git rebase --interactive HEAD~7
Comandos disponibles mientras se cambia de base
Hay seis comandos disponibles mientras se cambia la base:
pick
pick
simplemente significa que se incluye la confirmación. Reordenar los comandospick
cambia el orden de las confirmaciones cuando la fusión mediante cambio de base está en curso. Si eliges no incluir una confirmación, debes eliminar la línea completa.reword
- El comando
reword
es similar apick
, 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. Cualquier cambio hecho por la confirmación no se ve afectado. edit
- Si elige realizar
edit
en una confirmación, se le dará la oportunidad de modificar la confirmación, lo que significa que puede agregar o cambiar la confirmación 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. Una confirmación se combina en la confirmación de arriba. Git te da la oportunidad de escribir un mensaje de confirmación nuevo describiendo ambos cambios.
fixup
- Esto es similar a
squash
, pero la confirmación que se va a combinar 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 de forma arbitraria con una confirmación.
Un ejemplo de uso de git rebase
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.
- Las confirmaciones que eliges cambiar de base se clasifican en el orden de los cambios más antiguos (arriba) a los cambios más nuevos (abajo).
- Cada línea muestra un comando (de manera predeterminada,
pick
), el SHA de confirmación y el mensaje de confirmación. Todo el procedimientogit rebase
se centra en la manipulación de estas tres columnas. Los cambios realizados se fusionan mediante cambio de base en el repositorio. - Después de las confirmaciones, Git le indica el intervalo de confirmaciones con las que estamos trabajando (
41a72e6..7b36971
). - Finalmente, Git te ayuda diciéndote los comandos que están disponibles para ti cuando cambias de base las confirmaciones.
Información adicional
- Utilizar la rebase de Git en la línea de comando
- El capítulo "Creación de ramas en Git" del libro Pro Git
- El capítulo "Fusión interactiva mediante cambio de base" del libro Pro Git
- Confirmaciones de fusión mediante combinación con squash con fusión mediante cambio de base
- Sincronización de la rama en GitHub Desktop en la documentación de GitHub Desktop