Chuck's Academy

Git y Github

Uso avanzado de Git (rebase, cherry-pick, etc.)

En este módulo, exploraremos algunos comandos avanzados de Git que te permitirán manejar tu flujo de trabajo de forma más eficiente y flexible. Estos incluyen rebase, cherry-pick, stash, reset, y bisect.

Rebase

¿Qué es el rebase?

El rebase es una manera de integrar cambios desde una rama a otra, aplicando tus commits encima de la punta de otra rama. A diferencia de merge, rebase reescribe el historial del proyecto.

Uso básico de rebase

Supongamos que tienes una rama feature y deseas integrar los últimos cambios de main:

bash

Este comando toma los cambios de feature y los aplica inmediatamente después de los commits más recientes en main.

Rebase interactivo

El rebase interactivo permite reescribir el historial de commits, combinando, reordenando o editando commits. Es útil para limpiar el historial antes de fusionar:

bash

Reemplaza n con el número de commits que deseas reescribir. Esto abrirá un editor de texto y mostrará una lista de commits.

  • pick: Usar el commit tal cual.
  • reword: Modificar el mensaje del commit.
  • edit: Editar el commit (contenido o mensaje).
  • squash: Combinar el commit con el anterior.

Cherry-pick

¿Qué es el cherry-pick?

cherry-pick permite aplicar un commit específico de otra rama a tu rama actual. Es útil cuando necesitas aplicar un cambio puntual sin fusionar completamente la rama entera.

Uso básico de cherry-pick

Para aplicar un commit específico a la rama actual:

bash

Reemplaza <commit-hash> con el identificador del commit que deseas aplicar.

Stash

¿Qué es el stash?

El stash guarda temporalmente tu trabajo sin comprometerlo, permitiéndote trabajar en otra cosa sin perder tus cambios.

Uso básico de stash

Para guardar tus cambios temporales:

bash

Para recuperar los cambios guardados:

bash

Para ver la lista de stashes almacenados:

bash

Para aplicar y eliminar el stash:

bash

Reset

¿Qué es el reset?

reset permite revertir el repositorio a un estado anterior, modificando el historial de commits. Existen tres modos de reset: --soft, --mixed y --hard.

Uso básico de reset

Para resetear al commit especificado:

bash
  • --soft: Mantiene tus cambios en el área de preparación.
  • --mixed: Mantiene tus cambios en el directorio de trabajo.
  • --hard: Deshecha todos los cambios en el directorio de trabajo.

Bisect

¿Qué es el bisect?

bisect ayuda a encontrar un commit específico que introdujo un bug al usar una búsqueda binaria.

Uso básico de bisect

  1. Inicia el bisect:
    bash
  2. Marca el commit malo:
    bash
  3. Marca el commit bueno:
    bash

Git buscará automáticamente el commit que introdujo el bug.

Ejemplos prácticos

Uso de rebase para actualizar una rama de características

  1. Realiza cambios y commits en feature:

    bash
  2. Actualiza feature con los últimos cambios de main:

    bash

Uso de cherry-pick para aplicar un commit específico

  1. Encuentra y aplica un commit de feature a main:
    bash

Uso de stash para guardar cambios temporales

  1. Guarda tus cambios temporales:

    bash
  2. Recupera los cambios cuando estés listo:

    bash

Uso de bisect para encontrar un commit problemático

  1. Inicia el bisect:

    bash
  2. Marca los commits como buenos o malos hasta encontrar el commit problemático.

Buenas prácticas y consejos

  • Usa rebase interactivo para limpiar historial antes de fusionar.
  • Realiza cherry-pick solo cuando necesites aplicar cambios específicos y no toda la rama.
  • Utiliza stash para cambios temporales y mantener el área de trabajo limpia.
  • Usa bisect para encontrar eficientemente commits problemáticos.

Con estas técnicas avanzadas, puedes manejar mejor tu flujo de trabajo y resolver situaciones complejas en Git. En el próximo módulo, aprenderemos sobre la automatización con Git hooks.


Pregúntame lo que sea