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

9.3 KiB

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

/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

# 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.

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

// 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

// 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

# 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)

<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)

$ /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):

# 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)

$ /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)

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

feat!: change user API response format

BREAKING CHANGE: user response now includes additional metadata

O:

feat(api)!: change authentication flow

Español:

feat!: cambiar formato de respuesta de API de usuario

BREAKING CHANGE: la respuesta del usuario ahora incluye metadatos adicionales

O:

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:

feat: add user registration endpoint
fix: resolve memory leak in cache manager
docs: update API documentation

Español:

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

# 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