Initial commit
This commit is contained in:
354
commands/commit-message.md
Normal file
354
commands/commit-message.md
Normal file
@@ -0,0 +1,354 @@
|
||||
## 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
|
||||
Reference in New Issue
Block a user