He estado programando más tiempo del que me gusta admitir y una cosa no deja de sorprenderme: equipos que gastan una fortuna en pipelines de CI enormes solo para detectar errores ridículos que podrían haberse evitado en segundos. Se empuja código roto a propósito y se espera a que GitHub Actions o un runner en la nube nos diga que somos malos desarrolladores. Es como pagar a un portero para que te diga que te has atado mal los cordones después de tropezar en las escaleras.
Hay una forma mejor: instantánea, local, gratuita y que no te hace esperar ocho minutos para descubrir que ESLint está enfadado otra vez. Se llaman ganchos pre-commit. Sí, llevan décadas ahí, pero son brutalmente efectivos.
¿Qué es un gancho pre-commit? En esencia es un script que Git ejecuta justo antes de confirmar un commit. Si el script sale con código 0 el commit continúa. Si sale con cualquier otro código el commit se aborta y arregla el problema en caliente. No hay YAML infernal, no hay runners en bucle, no hay empujar a main y esperar a ver qué pasa. Solo aplicación local de reglas.
El coste real de confiar solo en CI Hemos normalizado la ritualización en la que las comprobaciones básicas ocurren después de que el código ya está en el repositorio. Esto tiene costes reales: minutos de CI consumidos por PRs, cambios de contexto por fallos de lint, flujo interrumpido por errores de tipado, secretos filtrados detectados demasiado tarde, drift en OpenAPI que rompe contratos downstream y código generado desactualizado que obliga a retrabajo y buscar culpables. Todo ello puede y debe detectarse en milisegundos en tu máquina. CI es para verificación. Pre-commit es para prevención.
Shift left, en serio Los ganchos pre-commit son la puerta de control más temprana en el ciclo de vida del desarrollo. Ejecutan antes de que exista la PR, antes de que CI se inicie, antes de las revisiones y mucho antes de que algo se despliegue o genere incidentes. Estás imponiendo estándares justo en el momento en que la intención se convierte en código.
Una configuración sencilla y letal Aquí tienes un gancho pre-commit mínimo que eleva tu proyecto al instante. Pégalo en .git/hooks/pre-commit y hazlo ejecutable con chmod +x .git/hooks/pre-commit
Ejemplo de hook #!/usr/bin/env bash set -e echo Ejecutando checks npm run lint || { echo Lint fallido; exit 1; } npm run format:check || { echo Formato incorrecto; exit 1; } npm run typecheck || { echo Errores de tipos; exit 1; } npm test -- --runTestsByPath $( git diff --cached --name-only ) || { echo Tests en archivos cambiados fallaron; exit 1; } echo Commit permitido
Con esto has aplicado sin coste: linting, formateo, seguridad de tipos y tests dirigidos a los archivos cambiados. Todo local y al instante.
Evita cometer secretos antes de que existan Esto se paga solo la primera vez que te salva la piel. Añade una comprobación simple en el hook para detectar tokens o claves en el diff staged y aborta el commit si detecta patrones sospechosos. Detectar secretos en CI ya es demasiado tarde porque el commit ya existe y el daño puede estar hecho. Proteger secretos es también una pieza clave de cualquier estrategia de ciberseguridad.
Ganchos como enforcement de arquitectura Los ganchos pueden ir más allá de estilo y tests y convertirse en reglas de arquitectura. Si alguien toca openapi.yaml se pueden regenerar clientes y fallar el commit si los clientes generados quedan desactualizados. Si se añade una migración sin archivo down se impide. Si se sube una versión sin changelog se bloquea. Resultado: menos comentarios en PRs, menos fallos en CI y desarrollo correcto por construcción.
Comparativa rápida Pre-commit ofrece feedback instantáneo, coste cero en minutos de cloud, y preserva el foco del desarrollador. CI ofrece verificación tardía, coste en servicios cloud y a menudo interrupciones en el flujo. Pre-commit dice arregla ahora; CI dice ya veremos después.
Sobre bypass y cultura Sí, un desarrollador con intención puede usar --no-verify, pero lo mismo ocurre con saltarse checks manualmente en otros pasos. Los ganchos no pretenden detener a agentes decididos, su objetivo es que la ruta correcta sea la opción por defecto para la mayoría. Implantar ganchos pre-commit es también un gesto cultural: respetamos el tiempo del equipo, no externalizamos la disciplina básica a servicios en la nube y priorizamos la prevención sobre la reacción.
La ley de hierro de los pre-commit hooks Si es barato de comprobar y caro de arreglar después, debe pertenecer a un gancho pre-commit. Punto final.
Q2BSTUDIO y cómo te ayudamos En Q2BSTUDIO somos una empresa de desarrollo de software y aplicaciones a medida que además es especialista en inteligencia artificial, ciberseguridad y servicios cloud aws y azure. Implementamos prácticas como ganchos pre-commit dentro de procesos más amplios de calidad para reducir costes de CI, evitar filtraciones y mejorar la fiabilidad del software. Si necesitas desarrollar aplicaciones robustas y seguras podemos ayudarte con soluciones a medida en desarrollo de aplicaciones y software a medida y con estrategias de protección y pruebas en ciberseguridad y pentesting.
Además integramos servicios de inteligencia de negocio y power bi, agentes IA, ia para empresas y automatizaciones que complementan un flujo de desarrollo sano y eficiente. Aplicar checks locales rápidos ahorra minutos de CI, reduce revisiones y evita incidentes que afectan a la continuidad del negocio.
Conclusión: los ganchos pre-commit son antiguos y poco glamorosos pero funcionan y ahorran dinero, tiempo y disgustos. Antes de añadir una nueva GitHub Action para algo básico, escribe un gancho. Tu yo futuro, tu equipo y tu factura cloud te lo agradecerán. Para equipos grandes recomendamos considerar frameworks que gestionan hooks en múltiples repositorios, pero incluso los ganchos Git simples son una victoria enorme.



