Git Workflow
Guía de flujos de trabajo Git para equipos profesionales.
Flujos Recomendados
Git Flow (Proyectos con releases)
code
main ●─────●─────●
╲ ╲
develop ●──●──●──●──●
╲ ╲
feature/* ●──● ●──●
- •
main: Producción estable - •
develop: Integración continua - •
feature/*: Features individuales - •
release/*: Preparación de releases - •
hotfix/*: Correcciones urgentes
GitHub Flow (Proyectos ágiles)
code
main ●────●────●────●
╲ ╲ ╲
feature ●─● ●─● ●─●
- •
main: Siempre deployable - •Branches de feature cortas
- •PRs con code review obligatorio
- •Merge squash para historia limpia
Trunk-Based Development (CI/CD)
- •Commits frecuentes a main
- •Feature flags para código incompleto
- •Branches máximo 1 día de vida
- •Pair programming recomendado
Convenciones de Commits
Formato Conventional Commits
code
<type>(<scope>): <subject> <body> <footer>
Types:
- •
feat: Nueva feature - •
fix: Bug fix - •
docs: Documentación - •
style: Formato (no código) - •
refactor: Refactorización - •
test: Tests - •
chore: Tareas de mantenimiento
Ejemplos:
code
feat(auth): add JWT authentication Implement JWT-based auth with refresh tokens. Includes login, logout, and token refresh endpoints. Closes #123
Mejores Prácticas
- •Commits Atómicos: Un cambio lógico por commit
- •Mensajes Descriptivos: Explica el "porqué", no solo el "qué"
- •Branches Cortas: Máximo 2-3 días de vida
- •Rebase vs Merge: Usa rebase para historia lineal
- •Code Review: Todo código debe ser revisado
- •Commits Frecuentes: Commit early, commit often
Comandos Útiles
Historia Limpia
bash
# Rebase interactivo git rebase -i HEAD~5 # Amend al último commit git commit --amend --no-edit # Squash de commits git reset --soft HEAD~3 git commit -m "mensaje consolidado"
Seguridad
bash
# Ver cambios antes de push git diff origin/main # Stash temporal git stash push -m "contexto" git stash pop # Cherry-pick git cherry-pick <commit-hash>
Anti-Patrones
❌ Evitar:
- •Commits con mensajes como "fix", "update", "WIP"
- •Branches de meses de antigüedad
- •Push force a branches compartidas
- •Merge commits innecesarios
- •Archivos grandes/binarios en repo