¿.gitignore no funciona? Esta es la solución

El noventa por ciento de los casos en los que «gitignore está roto» se explica con un solo dato: las reglas de ignore solo se aplican a archivos que Git todavía no está trackeando. Se arregla con dos comandos. Lo demás es sintaxis.

🎙️ Publicado y grabado:

🎧 Escuchar esta guía

La solución para archivos ya trackeados

# añadiste .env a .gitignore, pero git todavía lo trackea
# porque se confirmó ANTES de que existiera la regla.

git rm --cached .env            # deja de trackearlo (¡conserva el archivo local!)
git commit -m "Stop tracking .env"

# versión para una carpeta entera:
git rm -r --cached node_modules/
git commit -m "Stop tracking node_modules"

Comprueba POR QUÉ se ignora un archivo (o por qué no)

git check-ignore -v .env
# .gitignore:2:.env    .env     ← archivo, línea y regla responsables
# sin salida = nada lo ignora (o ya está trackeado)

git status --ignored            # muestra todo lo que se está ignorando

Sintaxis de patrones: los seis que necesitas

*.log             # todos los archivos .log, estén donde estén
build/            # la carpeta "build" (/ al final = solo carpetas)
/config.json      # SOLO en la raíz del repo (/ al principio = ancla)
docs/*.pdf        # pdf dentro de docs/, pero no en subcarpetas
docs/**/*.pdf     # pdf en cualquier nivel dentro de docs/
!keep.log         # excepción: trackearlo aunque antes figure *.log
La trampa de las excepciones
!important.txt no puede rescatar un archivo dentro de una carpeta ignorada. Si ignoras logs/, Git ni siquiera mira dentro, así que !logs/keep.txt no hace nada. La salida consiste en dejar de ignorar la carpeta, volver a ignorar su contenido y después exceptuar el archivo: !logs/ + logs/* + !logs/keep.txt.

Plantillas para empezar

# Python
__pycache__/
*.pyc
.venv/
venv/
.env
dist/
*.egg-info/

# Node
node_modules/
dist/
build/
.env
.env.*
npm-debug.log*

# añadidos universales (para cualquier proyecto)
.DS_Store         # basura de macOS
Thumbs.db         # basura de Windows
*.swp             # basura de vim
.idea/ .vscode/   # config del editor (depende de las normas del equipo)

Encontrarás plantillas completas para cualquier stack en github.com/github/gitignore: son oficiales, se mantienen al día y puedes copiarlas sin problema.

Si el archivo trackeado contenía un SECRETO
git rm --cached deja de trackearlo de ahora en adelante, pero el secreto sigue en el historial, y los rastreadores de repositorios públicos encuentran claves en cuestión de minutos. Sigue este orden: 1) revoca o rota la clave ahora mismo desde el proveedor; 2) después limpia el historial con git filter-repo si merece la pena. Rotar la clave es la solución; operar el historial es higiene. Tienes el proceso completo en la página principal de Git, sección 08.
📚 Esta página forma parte de nuestra serie sobre Git. El modelo mental completo —los tres árboles y las ramas como post-its—, con audio: Git en 10 minutos →