Rebase a una confirmación específica en Git

John Wachira 15 febrero 2024
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:

Git Rebase a la confirmación anterior: flujo de trabajo básico

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.

Git Rebase para confirmación específica - Flujo de trabajo

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:

Git Rebase para confirmación específica - Salida

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.

Git Rebase a una confirmación específica y elimine la primera confirmación - Flujo de trabajo

Así es como lo hacemos:

$ git rebase –onto 846e2fa e2ff2bc

El comando anterior tendría el efecto que se muestra a continuación:

Git Rebase a una confirmación específica y elimine la primera confirmación - Salida

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?

Git Rebase a una confirmación específica y elimine la última confirmación - Flujo de trabajo

Aquí es donde entra el tercer argumento. Ejecutaremos lo siguiente:

$ git rebase –onto 846e2fa bd9172c 730f163

Esto resultará en:

Git Rebase a una confirmación específica y elimine la última confirmación - Salida

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 Wachira avatar John Wachira avatar

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

Artículo relacionado - Git Rebase