Files
gh-wasabeef-claude-code-coo…/commands/commit-message.md
2025-11-30 09:05:32 +08:00

355 lines
9.3 KiB
Markdown

## Mensaje de Commit
Genera mensajes de commit a partir de cambios staged (git diff --staged). Este comando solo crea mensajes y los copia al portapapeles—no ejecuta ningún comando git.
### Uso
```bash
/commit-message [opciones]
```
### Opciones
- `--format <formato>` : Elegir formato de mensaje (conventional, gitmoji, angular)
- `--lang <idioma>` : Establecer idioma explícitamente (en, es)
- `--breaking` : Incluir detección de cambios disruptivos
### Ejemplos Básicos
```bash
# Generar mensaje a partir de cambios staged (idioma auto-detectado)
# La sugerencia principal se copia automáticamente al portapapeles
/commit-message
# Especificar idioma explícitamente
/commit-message --lang es
/commit-message --lang en
# Incluir detección de cambios disruptivos
/commit-message --breaking
```
### Prerrequisitos
**Importante**: Este comando solo funciona con cambios staged. Ejecuta `git add` primero para staged tus cambios.
```bash
# Si no hay nada staged, verás:
$ /commit-message
No staged changes found. Please run git add first.
```
### Función Automática de Portapapeles
La sugerencia principal se copia al portapapeles como comando completo: `git commit -m "mensaje"`. Solo pégalo y ejecútalo en tu terminal.
**Notas de Implementación**:
- Ejecutar `pbcopy` en un proceso separado de la salida del mensaje
- Usar `printf` en lugar de `echo` para evitar saltos de línea no deseados
### Detección Automática de Convenciones del Proyecto
**Importante**: Si existen convenciones específicas del proyecto, tienen prioridad.
#### 1. Verificación de Configuración CommitLint
Detecta automáticamente configuraciones de los siguientes archivos:
- `commitlint.config.js`
- `commitlint.config.mjs`
- `commitlint.config.cjs`
- `commitlint.config.ts`
- `.commitlintrc.js`
- `.commitlintrc.json`
- `.commitlintrc.yml`
- `.commitlintrc.yaml`
- `package.json` con sección `commitlint`
```bash
# Buscar archivos de configuración
find . -name "commitlint.config.*" -o -name ".commitlintrc.*" | head -1
```
#### 2. Detección de Tipos Personalizados
Ejemplo de tipos específicos del proyecto:
```javascript
// commitlint.config.mjs
export default {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [
2,
"always",
[
"feat",
"fix",
"docs",
"style",
"refactor",
"test",
"chore",
"wip", // work in progress
"hotfix", // urgent fix
"release", // release
"deps", // dependency update
"config", // configuration change
],
],
},
};
```
#### 3. Detección de Configuración de Idioma
```javascript
// El proyecto usa mensajes en español
export default {
rules: {
"subject-case": [0], // Deshabilitar para soporte español
"subject-max-length": [2, "always", 72], // Ajustar límite de caracteres para español
},
};
```
#### 4. Análisis de Historial de Commits Existentes
```bash
# Aprender patrones de uso de commits recientes
git log --oneline -50 --pretty=format:"%s"
# Estadísticas de tipos utilizados
git log --oneline -100 --pretty=format:"%s" | \
grep -oE '^[a-z]+(\([^)]+\))?' | \
sort | uniq -c | sort -nr
```
### Detección Automática de Idioma
Cambia automáticamente entre español/inglés/japonés basado en:
1. **Configuración CommitLint** configuraciones de idioma
2. **análisis git log** detección automática
3. **archivo del proyecto** configuraciones de idioma
4. **archivo cambiado** análisis de comentarios y cadenas
Por defecto es inglés. Genera en español si se detecta como proyecto en español.
### Formato de Mensaje
#### Conventional Commits (Por defecto)
```text
<type>: <description>
```
**Importante**: Siempre genera mensajes de commit de una sola línea. No genera mensajes multilínea.
**Nota**: Las convenciones específicas del proyecto tienen prioridad si existen.
### Tipos Estándar
**Tipos Requeridos**:
- `feat`: Nueva característica (adición de característica visible al usuario)
- `fix`: Corrección de error
**Tipos Opcionales**:
- `build`: Cambios en sistema de build o dependencias externas
- `chore`: Otros cambios (sin impacto en release)
- `ci`: Cambios en archivos y scripts de configuración CI
- `docs`: Cambios solo en documentación
- `style`: Cambios que no afectan el significado del código (espacios, formato, punto y coma, etc.)
- `refactor`: Cambios de código sin correcciones de errores o adiciones de características
- `perf`: Mejoras de rendimiento
- `test`: Agregando o corrigiendo pruebas
### Ejemplo de Salida (Proyecto en Inglés)
```bash
$ /commit-message
📝 Sugerencias de Mensaje de Commit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ Candidato Principal:
feat: implement JWT-based authentication system
📋 Alternativas:
1. feat: add user authentication with JWT tokens
2. fix: resolve token validation error in auth middleware
3. refactor: extract auth logic into separate module
`git commit -m "feat: implement JWT-based authentication system"` copiado al portapapeles
```
**Ejemplo de Implementación (Versión Corregida)**:
```bash
# Copiar comando de commit al portapapeles primero (sin salto de línea)
printf 'git commit -m "%s"' "$COMMIT_MESSAGE" | pbcopy
# Después mostrar mensaje
cat << EOF
📝 Sugerencias de Mensaje de Commit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ Candidato Principal:
$COMMIT_MESSAGE
📋 Alternativas:
1. ...
2. ...
3. ...
✅ \`git commit -m "$COMMIT_MESSAGE"\` copiado al portapapeles
EOF
```
### Ejemplo de Salida (Proyecto en Español)
```bash
$ /commit-message
📝 Sugerencias de Mensaje de Commit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ Candidato Principal:
feat: implementar sistema de autenticación JWT
📋 Alternativas:
1. feat: agregar autenticación de usuario con tokens JWT
2. fix: resolver error de validación de token en middleware auth
3. refactor: extraer lógica de auth a módulo separado
`git commit -m "feat: implementar sistema de autenticación JWT"` copiado al portapapeles
```
### Resumen de Operación
1. **Análisis**: Analizar contenido de `git diff --staged`
2. **Generación**: Generar mensaje de commit apropiado
3. **Copiar**: Copiar automáticamente candidato principal al portapapeles
**Nota**: Este comando no ejecuta git add o git commit. Solo genera mensajes de commit y copia al portapapeles.
### Características Inteligentes
#### 1. Clasificación Automática de Cambios (Solo Archivos Staged)
- Adición de archivo nuevo → `feat`
- Patrones de corrección de errores → `fix`
- Solo archivos de prueba → `test`
- Cambios en archivos de configuración → `chore`
- Actualizaciones README/docs → `docs`
#### 2. Detección Automática de Convenciones del Proyecto
- Archivo `.gitmessage`
- Convenciones en `CONTRIBUTING.md`
- Patrones de historial de commits pasados
#### 3. Detalles de Detección de Idioma (Solo Cambios Staged)
```bash
# Criterios de detección (orden de prioridad)
1. Detectar idioma del contenido git diff --staged
2. Análisis de comentarios de archivos staged
3. Análisis de idioma de git log --oneline -20
4. Configuraciones de idioma principal del proyecto
```
#### 4. Detalles de Análisis de Staging
Información utilizada para análisis (solo lectura):
- `git diff --staged --name-only` - Lista de archivos cambiados
- `git diff --staged` - Contenido real de cambios
- `git status --porcelain` - Estado de archivos
### Detección de Cambios Disruptivos
Para cambios disruptivos de API:
**Inglés**:
```bash
feat!: change user API response format
BREAKING CHANGE: user response now includes additional metadata
```
O:
```bash
feat(api)!: change authentication flow
```
**Español**:
```bash
feat!: cambiar formato de respuesta de API de usuario
BREAKING CHANGE: la respuesta del usuario ahora incluye metadatos adicionales
```
O:
```bash
feat(api)!: cambiar flujo de autenticación
```
### Mejores Prácticas
1. **Coincidir con proyecto**: Seguir idioma de commits existentes
2. **Concisión**: Claro dentro de 50 caracteres
3. **Consistencia**: No mezclar idiomas (mantener consistencia en español)
4. **OSS**: Inglés recomendado para código abierto
5. **Una línea**: Siempre mensaje de commit de una línea (complementar con PR para explicaciones detalladas)
### Patrones Comunes
**Inglés**:
```text
feat: add user registration endpoint
fix: resolve memory leak in cache manager
docs: update API documentation
```
**Español**:
```text
feat: agregar endpoint de registro de usuario
fix: resolver fuga de memoria en gestor de caché
docs: actualizar documentación de API
```
### Integración con Claude
```bash
# Usar con cambios staged
git add -p # Staging interactivo
/commit-message
"Generar mensaje de commit óptimo"
# Staged y analizar archivos específicos
git add src/auth/*.js
/commit-message --lang es
"Generar mensaje para cambios de autenticación"
# Detección y manejo de cambios disruptivos
git add -A
/commit-message --breaking
"Marcar apropiadamente si hay cambios disruptivos"
```
### Notas Importantes
- **Prerrequisito**: Los cambios deben estar staged con `git add` de antemano
- **Limitación**: Los cambios no staged no se analizan
- **Recomendación**: Verificar primero las convenciones de commit del proyecto existente