Rebase a una confirmación específica en Git
Este artículo analiza el proceso de cambio de base a una confirmación específica en Git. Usaremos varios escenarios para ilustrar cómo se puede lograr esto.
Emplearemos el comando git rebase --onto
para reorganizar una rama a una confirmación específica. Saltemos directamente.
Rebase a una confirmación específica en Git
Usamos el indicador --onto
cuando necesitamos reorganizar una rama a otra rama y especificar las confirmaciones.
Sintaxis básica:
git rebase –onto <new-parent> <old-parent> <head-of-new-parent>
Veamos escenarios de ejemplo.
Este es el flujo de trabajo básico que usaremos:
Rebase new-feature
a un compromiso específico en main
En nuestro primer escenario, asumimos que queríamos usar una confirmación en principal
sin reorganizar toda la rama. Esto requerirá que tengamos en cuenta el SHA-1
de las confirmaciones en juego.
Podemos usar git log <branch-name>
para obtener los hashes para las confirmaciones.
En nuestro caso, queremos mover las confirmaciones en la rama nueva función
a la rama principal
en la confirmación 846e2fa
(penúltima). Ejecutaremos lo siguiente:
$ git rebase –onto 846e2fa bd9172c
El comando anterior tendrá el efecto que se muestra a continuación:
Como queríamos mover toda la nueva característica
, no necesitamos tener un tercer argumento en nuestro comando. Git mueve toda la rama de forma predeterminada si omite el tercer argumento.
Rebase new-feature
a una confirmación específica en main
y elimine la primera confirmación en new-feature
Supongamos que nuestro e2ff2bc
es una dependencia y queremos mover nuestra rama a main
en la confirmación 846e2fa
, que es la misma dependencia que tenemos. En lenguaje sencillo, queremos reorganizar new-feature
a main
en 846e2fa
y omitir la primera confirmación en new-feature
.
Así es como lo hacemos:
$ git rebase –onto 846e2fa e2ff2bc
El comando anterior tendría el efecto que se muestra a continuación:
El comando git rebase -onto
toma la confirmación principal como referencia. En términos más simples, se supone que debemos hacer referencia a la confirmación antes de la confirmación que queremos guardar.
Rebase new-feature
a una confirmación específica en main
y elimine la última confirmación en new-feature
Digamos que queremos mover new-feature
a 846e2fa
pero omitir la confirmación d7dbeb
en new-feature
. ¿Cómo haríamos esto?
Aquí es donde entra el tercer argumento. Ejecutaremos lo siguiente:
$ git rebase –onto 846e2fa bd9172c 730f163
Esto resultará en:
El tercer argumento solo apunta al HEAD
de la nueva confirmación principal; en nuestro caso tenemos 730f163
. Esto debería eliminar la confirmación y todas las confirmaciones posteriores.
En pocas palabras, Git nos permite cambiar la base de una rama a una confirmación específica. El comando git rebase -onto
acepta tres argumentos al reorganizar.
Recuerde siempre que el tercer argumento dicta la confirmación del nuevo padre.
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn