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:
# 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"
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
*.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
!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.
# 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.
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.