OpenCode y Git: Flujos de Trabajo Integrados
Git es el corazón del desarrollo colaborativo. OpenCode puede integrarse profundamente con tu flujo Git: generar commit messages convencionales, resolver conflictos inteligentemente, automatizar revisiones de merge requests y mantener un historial limpio y significativo.
Este tutorial asume que dominas el flujo Plan/Build y los workflows especializados. Aquí nos enfocamos en integración con Git.
Commit Messages Automatizados
Generación de commits convencionales
[Plan Mode]
Genera un commit message convencional para estos cambios:
Archivos modificados:
- @src/services/UserService.ts (añadido método validateEmail)
- @src/utils/validator.ts (añadida función isEmailValid)
- @tests/unit/UserService.test.ts (tests para validateEmail)
El cambio añade validación de email al crear usuarios.
Sigue el formato Conventional Commits:
- type(scope): description
- body opcional
- footer opcional
OpenCode generará:
feat(user): add email validation to user creation
Added validateEmail method to UserService that uses the new
isEmailValid utility function. Email validation checks for:
- Valid format
- No disposable domains
- MX record verification
Closes #123
Commits atómicos
Para cambios grandes, OpenCode puede sugerir dividir en commits atómicos:
[Plan Mode]
Estos cambios son demasiado grandes para un solo commit.
Archivos modificados:
- @src/services/PaymentService.ts (50 líneas)
- @src/api/payments.ts (30 líneas)
- @src/components/PaymentForm.tsx (80 líneas)
- @types/payment.ts (20 líneas)
Divide en commits atómicos lógicos, cada uno con su
commit message convencional.
OpenCode propondrá:
Commit 1: feat(types): add Payment interface and types
Commit 2: feat(service): implement payment processing logic
Commit 3: feat(api): add payment endpoints
Commit 4: feat(ui): add payment form component
Manejo de Branches
Creación de feature branches
[Plan Mode]
Voy a implementar autenticación con Google OAuth.
Genera un plan de branches y commits:
1. feature/auth-setup: configuración inicial
2. feature/auth-google: integración Google OAuth
3. feature/auth-ui: componentes de login
4. feature/auth-tests: tests de autenticación
Para cada branch, especifica:
- Nombre del branch
- Archivos a modificar
- Commit message principal
- Dependencies entre branches
Estrategias de branching
OpenCode puede sugerir la mejor estrategia según tu proyecto:
[Plan Mode]
Analiza el proyecto y sugiere estrategia de branching:
Contexto:
- Equipo de 5 desarrolladores
- Despliegue continuo a staging
- Despliegue a producción semanal
- 2-3 features en paralelo
Opciones:
- Git Flow
- GitHub Flow
- Trunk-Based Development
- Release Flow
Recomienda la mejor opción con justificación.
Resolución de Conflictos
Análisis de conflictos
Cuando encuentres un conflicto de merge:
[Plan Mode]
Tengo un conflicto en @src/services/UserService.ts:
<<<<<<< HEAD const user = await db.user.findUnique({ where: { email } });
const user = await this.repository.findByEmail(email);
feature/user-repository
Analiza ambos lados del conflicto y sugiere:
1. Cuál versión es correcta
2. Por qué
3. Cómo resolverlo
4. Si hay otros archivos con conflictos similares
Contexto: Estamos migrando de acceso directo a BD a
patrón repository.
OpenCode analizará el contexto y propondrá:
Resolución: Usar la versión del feature branch
Justificación:
- El feature branch implementa el patrón repository
- HEAD usa acceso directo a BD (patrón antiguo)
- La migración a repository es el objetivo del feature
Resolución:
```typescript
const user = await this.repository.findByEmail(email);
Archivos similares con conflictos:
- @src/services/OrderService.ts
- @src/services/ProductService.ts
### Resolución automática de conflictos
Para conflictos más simples:
[Plan Mode]
Resuelve estos conflictos automáticamente:
Conflicto en @src/types/index.ts:
<<<<<<< HEAD
export interface User { id: string; name: string; }
=======
export interface User { id: string; name: string; email: string; }
>>>>>>> feature/add-email
El feature branch añade el campo email, que es el cambio deseado. Resuelve usando la versión del feature branch.
## Merge Requests y Pull Requests
### Descripción de MR/PR
[Plan Mode]
Genera una descripción completa para este MR/PR:
Cambios:
- @src/services/AuthService.ts (nuevo)
- @src/middleware/auth.ts (nuevo)
- @src/api/auth.ts (modificado)
- @src/controllers/AuthController.ts (modificado)
La descripción debe incluir:
- Título claro
- Resumen de cambios
- Motivo del cambio
- Cómo probar
- Breaking changes
- Checklist de revisión
OpenCode generará:
```markdown
## feat: add JWT authentication system
### Summary
Implemented JWT-based authentication with refresh tokens.
Users can now login, logout, and refresh their tokens securely.
### Changes
- Added AuthService for token generation and validation
- Added auth middleware for protected routes
- Updated auth endpoints to use JWT
- Added token refresh mechanism
### Motivation
Previous session-based authentication had scaling issues
and didn't support mobile clients well. JWT provides better
scalability and stateless authentication.
### How to Test
1. Login with valid credentials
2. Verify access token is returned
3. Use access token to access protected route
4. Wait for token to expire
5. Use refresh token to get new access token
### Breaking Changes
- Session cookies no longer used
- Clients must handle JWT tokens
- Old sessions will be invalidated on deploy
### Review Checklist
- [ ] JWT secret is configured in environment
- [ ] Token expiration is appropriate
- [ ] Refresh token mechanism works
- [ ] Protected routes are secured
- [ ] Tests added for new functionality
Code review en MR/PR
[Plan Mode]
Revisa este MR como si fueras un reviewer senior:
MR: !234 - Add JWT authentication
Archivos: 12 modificados, 3 nuevos
Líneas: +450, -120
Busca:
- Problemas de seguridad
- Violaciones de convenciones
- Código duplicado
- Tests faltantes
- Documentación incompleta
Contexto: @AGENTS.md
Rebase y Cherry-Pick
Rebase interactivo
[Plan Mode]
Necesito hacer rebase interactivo de este branch:
Commits en el branch:
1. a1b2c3d - feat: add user validation
2. e4f5g6h - fix: validation bug
3. i7j8k9l - refactor: extract validator
4. m0n1o2p - chore: update deps
Quiero:
- Combinar commits 1 y 2 (fix junto con feat)
- Mantener commit 3
- Squash commit 4 en commit 3
Genera los comandos de rebase interactivo.
OpenCode generará:
bashgit rebase -i HEAD~4 # En el editor que se abre, marca: pick a1b2c3d feat: add user validation fix e4f5g6h fix: validation bug pick i7j8k9l refactor: extract validator squash m0n1o2p chore: update deps # Mensaje de commit combinado: feat: add user validation and extract validator Added user validation with email and password checks. Fixed validation bug that allowed invalid emails. Extracted validator logic to separate module for reusability.
Cherry-pick selectivo
[Plan Mode]
Quiero cherry-pick solo el commit que añade el fix de
seguridad del branch feature/auth-fix al main.
Commits en feature/auth-fix:
1. abc123 - feat: add auth UI
2. def456 - fix: security vulnerability in token validation
3. ghi789 - refactor: improve auth flow
Solo quiero el commit def456. Genera el comando.
Git Hooks con OpenCode
Pre-commit hook
[Plan Mode]
Genera un pre-commit hook que ejecute OpenCode para
verificar cambios antes de commitear:
Verificaciones:
1. Lint y format
2. Typecheck
3. Tests unitarios de archivos modificados
4. Code review automático de OpenCode
5. Reject si issues críticos > 0
Script: .git/hooks/pre-commit
bash#!/bin/bash # .git/hooks/pre-commit echo "Running pre-commit checks..." # Lint npm run lint || exit 1 # Typecheck npm run type-check || exit 1 # Tests de archivos modificados CHANGED_FILES=$(git diff --cached --name-only | grep '\.ts$') if [ -n "$CHANGED_FILES" ]; then npm run test -- $CHANGED_FILES || exit 1 fi # OpenCode review echo "Running OpenCode review..." opencode review --cached --critical-only if [ $? -ne 0 ]; then echo "OpenCode found critical issues. Commit rejected." exit 1 fi echo "Pre-commit checks passed."
Pre-push hook
[Plan Mode]
Genera un pre-push hook que:
1. Ejecute tests E2E si se modifican archivos de E2E
2. Verifique que el branch esté actualizado con main
3. Ejecute build si se modifican archivos de build
4. Reject si falla alguna verificación
Script: .git/hooks/pre-push
Historial Limpio
Squash de commits de WIP
[Plan Mode]
Este branch tiene muchos commits de "WIP" y "fix typo":
Commits:
- wip: started auth
- fix: typo in auth
- wip: more auth
- fix: another typo
- wip: almost done
- feat: auth complete
Squash todos los commits de WIP y fix en un solo commit
con un mensaje limpio.
Genera los comandos necesarios.
Bisect para bugs
[Plan Mode]
Necesito encontrar qué commit introdujo este bug:
Bug: El login falla con error 500
Primera versión buena: v1.0.0 (commit abc123)
Versión actual con bug: HEAD (commit def456)
Genera comandos de git bisect para encontrar el commit
culpable automáticamente.
OpenCode generará:
bash# Iniciar bisect git bisect start # Marcar commit bueno git bisect good abc123 # Marcar commit malo git bisect bad def456 # Git hará checkout de commits intermedios # Por cada commit, prueba el login: # - Si funciona: git bisect good # - Si falla: git bisect bad # Al final, git te dirá qué commit introdujo el bug git bisect reset
Workflows de Colaboración
Feature Branch Workflow
[Plan Mode]
Configura workflow de feature branch para el equipo:
Proceso:
1. Crear branch desde main
2. Desarrollar feature
3. Commits atómicos con mensajes convencionales
4. Push a remote
5. Crear MR/PR
6. Code review
7. Merge a main
8. Eliminar branch
Genera:
- Comandos para cada paso
- Plantilla de MR/PR
- Reglas de protección de branch
Trunk-Based Development
[Plan Mode]
Configura workflow trunk-based para el equipo:
Proceso:
1. Commits directos a main (o feature branches de corta vida)
2. CI/CD en cada commit
3. Feature flags para funcionalidad inacabada
4. Rollback instantáneo si hay problemas
Genera:
- Estrategia de feature flags
- Comandos de rollback
- Configuración de CI/CD
Errores Comunes con Git y OpenCode
| Error | Causa | Solución |
|---|---|---|
| Commits genéricos | No usar OpenCode para mensajes | Genera commit messages con OpenCode |
| Conflictos frecuentes | Branches de larga vida | Usa feature branches de corta duración |
| Historial sucio | Muchos commits WIP | Squash antes de merge |
| MR/PR sin descripción | No documentar cambios | Genera descripción con OpenCode |
| Merge conflicts complejos | Cambios en mismos archivos | Coordina con equipo, usa code review |
Conclusión
Integrar OpenCode con Git requiere:
- Commits atómicos: Cada cambio tiene un propósito claro
- Mensajes convencionales: Generados por OpenCode, revisados por humanos
- Resolución inteligente: OpenCode analiza contexto en conflictos
- MR/PR bien documentados: Descripciones generadas automáticamente
- Hooks automatizados: Verificaciones antes de push/commit
En Binary Core, redujimos el tiempo de resolución de conflictos en un 70% y mejoramos la calidad de commit messages dramáticamente usando OpenCode. La clave es tratar Git como una herramienta de colaboración, no solo de versionado: cada commit cuenta, cada MR/PR comunica.
¿Listo para documentar tu código? Aprende a generar documentación automáticamente con OpenCode.
Serie completa:
Binary Core
Equipo Binary Core