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.
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}
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
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.
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
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
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
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
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.
¿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