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
- Inicia el bisect:
bash
- Marca el commit malo:
bash
- 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
-
Realiza cambios y commits en
feature
:bash -
Actualiza
feature
con los últimos cambios demain
:bash
Uso de cherry-pick para aplicar un commit específico
- Encuentra y aplica un commit de
feature
amain
:bash
Uso de stash para guardar cambios temporales
-
Guarda tus cambios temporales:
bash -
Recupera los cambios cuando estés listo:
bash
Uso de bisect para encontrar un commit problemático
-
Inicia el bisect:
bash -
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.
- Introducción a Git y GitHub
- Instalación y configuración de Git
- Fundamentos de control de versiones
- Creación y clonación de repositorios
- Realización de commits y seguimiento de cambios
- Gestión de ramas (branching)
- Fusionado de ramas (merging)
- Resolución de conflictos
- Trabajo colaborativo en GitHub
- Pull requests y revisiones de código
- Uso avanzado de Git (rebase, cherry-pick, etc.)
- Automatización con Git hooks
- Integración continua con GitHub Actions
- Gestión de versiones y lanzamiento de releases
- Conclusiones y mejores prácticas en Git y GitHub