🔧 Tech Tips Monday: 5 Comandos Git Avanzados que Cambiarán tu Workflow

Cada lunes arrancamos con tips prácticos que mejoran la productividad. Hoy vamos con comandos Git que van más allá del básico add-commit-push y que realmente optimizan el trabajo diario.

:high_voltage: 1. Git Stash con Contexto

El stash básico funciona, pero pierde contexto. Estos comandos te dan control total:

# Stash con mensaje descriptivo
git stash save "WIP: implementando autenticación OAuth"

# Stash solo archivos específicos
git stash push -m "hotfix crítico" src/auth.js src/login.js

# Ver todos los stashes con detalles
git stash list --stat

# Aplicar stash específico sin eliminarlo
git stash apply stash@{2}

# Crear branch desde un stash
git stash branch feature/oauth-fix stash@{1}

:magnifying_glass_tilted_left: 2. Git Bisect: Encontrar Bugs Automáticamente

Cuando un bug aparece y no sabes en qué commit, Git Bisect hace búsqueda binaria automática:

# Iniciar bisect
git bisect start

# Marcar commit actual como malo
git bisect bad

# Marcar último commit conocido como bueno
git bisect good HEAD~10

# Git te lleva al commit medio, pruebas y marcas
git bisect good  # o git bisect bad

# Continúa hasta encontrar el commit problemático
# Al final:
git bisect reset

Pro tip: Automatiza con scripts de testing:

git bisect run npm test

:memo: 3. Git Worktree: Múltiples Branches Simultáneos

¿Necesitas trabajar en dos features al mismo tiempo sin perder contexto?

# Crear worktree en directorio separado
git worktree add ../feature-payments feature/payments

# Ver todos los worktrees
git worktree list

# Trabajar normalmente en cada directorio
cd ../feature-payments
git commit -m "agregando Stripe integration"

# Limpiar worktree terminado
git worktree remove ../feature-payments

Beneficio: Cambias entre features instantáneamente sin stash ni checkout.

:bullseye: 4. Git Hooks para Automatización

Automatiza validaciones y tareas repetitivas:

Pre-commit hook (.git/hooks/pre-commit):

#!/bin/bash
# Ejecutar linter antes de cada commit
npm run lint
if [ $? -ne 0 ]; then
    echo "❌ Linting failed. Commit aborted."
    exit 1
fi

# Ejecutar tests rápidos
npm run test:unit
if [ $? -ne 0 ]; then
    echo "❌ Tests failed. Commit aborted."
    exit 1
fi

echo "✅ Pre-commit checks passed!"

Commit-msg hook para convenciones:

#!/bin/bash
# Validar formato de commit messages
commit_regex='^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .{1,50}'

if ! grep -qE "$commit_regex" "$1"; then
    echo "❌ Commit message format inválido!"
    echo "Formato: tipo(scope): descripción"
    echo "Ejemplo: feat(auth): agregar login con Google"
    exit 1
fi

:counterclockwise_arrows_button: 5. Git Rebase Interactivo Avanzado

Limpia tu historial antes de hacer merge:

# Rebase interactivo de últimos 3 commits
git rebase -i HEAD~3

# En el editor que se abre:
# pick abc123 feat: agregar login
# squash def456 fix: typo en login
# reword ghi789 feat: mejorar validación

# Comandos útiles:
# pick = usar commit tal como está
# reword = cambiar mensaje
# edit = pausar para hacer cambios
# squash = combinar con commit anterior
# drop = eliminar commit

Para commits ya pusheados (con cuidado):

# Solo si trabajas solo en la branch
git rebase -i origin/main
git push --force-with-lease

:hammer_and_wrench: Bonus: Aliases que Ahorran Tiempo

Configura estos aliases en tu ~/.gitconfig:

[alias]
    # Status compacto
    s = status -s
    
    # Log visual hermoso
    lg = log --oneline --graph --decorate --all
    
    # Commit rápido
    cm = commit -m
    
    # Checkout y crear branch
    cb = checkout -b
    
    # Push y set upstream
    pushu = push -u origin HEAD
    
    # Undo último commit (mantiene cambios)
    undo = reset HEAD~1
    
    # Diff de staged files
    staged = diff --cached
    
    # Branches ordenadas por fecha
    recent = branch --sort=-committerdate

:bar_chart: Verificación Rápida de Productividad

Prueba estos comandos para medir el impacto:

# Ver estadísticas de commits por author
git shortlog -sn --since="1 month ago"

# Archivos más modificados (hotspots)
git log --name-only --pretty=format: | sort | uniq -c | sort -rg | head -10

# Actividad por día de la semana
git log --date=format:'%A' --pretty=format:'%ad' | sort | uniq -c

:light_bulb: Tip de la Semana

Git Maintenance Automático:
Configura Git para optimizarse automáticamente:

git config --global maintenance.auto true
git config --global maintenance.strategy incremental

Esto ejecuta tareas de limpieza y optimización en background, manteniendo tu repo rápido.

:speech_balloon: ¿Qué comando Git les ha cambiado más el workflow? ¿Tienen algún alias o tip que usen religiosamente? Compartamos trucos para hacer Git más eficiente.

#TechTipsMonday #Git #Productivity #DevTools #Workflow #VersionControl