TL;DR — Resumen Rápido
Domine técnicas avanzadas de Git para mantener un historial limpio, automatizar tareas y depurar regresiones con rebase, bisect y hooks.
Más Allá de lo Básico en Git
Mientras git commit y git push son suficientes para proyectos individuales, colaborar en bases de código grandes requiere dominar herramientas que reducen conflictos de fusión, automatizan la calidad y acortan el tiempo de depuración.
1. Git Rebase: Manteniendo un Historial Lineal
Rebase mueve o combina una secuencia de commits a una nueva base. En lugar de usar git merge main, puedes hacer rebase de tu rama feature sobre la versión más reciente de main.
Cómo Hacer Rebase
git checkout feature
git rebase main
Regla de Oro: Nunca hagas rebase en una rama pública compartida.
Rebase Interactivo (Squash)
Para unificar commits “WIP” (Work In Progress) en uno solo antes de crear un PR:
git rebase -i HEAD~5
Cambie pick por squash en el editor para fusionarlos.
2. Git Bisect: El Superpoder de Depuración
Git Bisect realiza una búsqueda binaria en el historial para encontrar el commit exacto que introdujo un error.
- Iniciar:
git bisect start - Marcar el estado actual como roto:
git bisect bad - Marcar un commit antiguo que sí funciona:
git bisect good <hash> - Git cambiará a un commit en el medio. Pruébelo y marque
git bisect goodogit bisect bad. - Repita hasta que Git devuelva el commit culpable.
- Limpiar:
git bisect reset
3. Git Hooks: Automatizando la Calidad
Los ganchos (hooks) son scripts que Git ejecuta antes o después de eventos como commits o pushes. Se guardan en .git/hooks.
Ejemplo: Hook pre-commit
Evita que se envíe código incompleto o que falle las pruebas.
#!/bin/sh
# Archivo: .git/hooks/pre-commit
# Hacer ejecutable con: chmod +x .git/hooks/pre-commit
echo "Ejecutando pruebas..."
npm test
if [ $? -ne 0 ]; then
echo "¡Las pruebas deben pasar antes del commit!"
exit 1
fi
Resumen
- Use Rebase para historiales limpios (pero nunca en ramas públicas).
- Use Bisect para encontrar regresiones matemáticamente.
- Use Hooks para imponer calidad antes de cada commit.