Inicio > Cursos > Git y GitHub > Git Hooks y Husky
Git y GitHubGit AvanzadoLección 9 de 15

Git Hooks y Husky

Los Git hooks son scripts que se ejecutan automáticamente cuando ocurren eventos de Git. pre-commit se ejecuta antes de crear un commit (ideal para correr el linter o tests rápidos). commit-msg valida el formato del mensaje de commit. pre-push corre los tests completos antes de enviar al remoto. Ayudan a mantener la calidad del código de forma automática.

Husky facilita gestionar hooks en proyectos JavaScript/Node: los define en package.json y los instala automáticamente cuando alguien hace npm install, garantizando que todo el equipo tenga los mismos hooks. lint-staged complementa a Husky ejecutando el linter solo en los archivos modificados (staged), haciendo el proceso mucho más rápido que analizar todo el proyecto.

# Los hooks viven en .git/hooks/ (no se versionan)
ls .git/hooks/
# pre-commit, commit-msg, pre-push, post-merge...

# Ejemplo: hook pre-commit manual (shell script)
# .git/hooks/pre-commit
#!/bin/sh
npm run lint
npm run test
# Si devuelve código != 0, el commit se cancela

# --- HUSKY (gestión de hooks en npm) ---
npm install --save-dev husky
npx husky init
# Crea la carpeta .husky/ (versionable)

# Hook pre-commit con Husky
# .husky/pre-commit
npx lint-staged

# Hook commit-msg: validar formato
# .husky/commit-msg
npx --no -- commitlint --edit $1

# --- LINT-STAGED: solo formatea archivos staged ---
npm install --save-dev lint-staged

# package.json
# "lint-staged": {
#   "*.{js,ts,jsx,tsx}": ["eslint --fix", "prettier --write"],
#   "*.{css,json,md}": ["prettier --write"]
# }
Consejo🔧 Los hooks en .git/hooks/ no se versionan. Por eso Husky guarda los hooks en .husky/ (carpeta versionable). Todo el equipo obtiene los mismos hooks automáticamente.
← Tags y Versionado SemánticoComandos Ninja de Git →

Practica esta lección

Resuelve los ejercicios del curso de Git y GitHub en la app, gratis y con corrección automática.

Empezar a practicar