opencodegitworkflowscolaboraciónversion-control

OpenCode y Git: Flujos de Trabajo Integrados

By Binary Core

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á:

bash
git 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

ErrorCausaSolución
Commits genéricosNo usar OpenCode para mensajesGenera commit messages con OpenCode
Conflictos frecuentesBranches de larga vidaUsa feature branches de corta duración
Historial sucioMuchos commits WIPSquash antes de merge
MR/PR sin descripciónNo documentar cambiosGenera descripción con OpenCode
Merge conflicts complejosCambios en mismos archivosCoordina con equipo, usa code review

Conclusión

Integrar OpenCode con Git requiere:

  1. Commits atómicos: Cada cambio tiene un propósito claro
  2. Mensajes convencionales: Generados por OpenCode, revisados por humanos
  3. Resolución inteligente: OpenCode analiza contexto en conflictos
  4. MR/PR bien documentados: Descripciones generadas automáticamente
  5. 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:

  1. Instalación y primeros pasos
  2. Flujo de trabajo Plan/Build
  3. Configuración avanzada
  4. Debugging
  5. Refactors
  6. Generación de tests
  7. Code review
  8. Workflows especializados
  9. Git workflows (este artículo)

Binary Core

Equipo Binary Core

← Back to blog