guide

Ignorar con .gitignore archivos que ya están confirmados

Explica cómo sacar del seguimiento con git rm --cached los archivos que siguen rastreándose aunque se añadan a .gitignore, cómo encontrar archivos rastreados que coinciden con las reglas y qué orden seguir si se confirmó información secreta.

Es la pregunta más frecuente. .gitignore solo se aplica a archivos que todavía no están rastreados. Un archivo que ya se confirmó alguna vez sigue mostrando cambios aunque se añada una regla. Para dejar de rastrearlo hay que sacar el archivo del índice (área de preparación).

Un archivo o una carpeta

# 1) Añadir la regla a .gitignore (ej.: .env, dist/)
# 2) Quitar solo del índice: el archivo real de la carpeta de trabajo se queda
git rm --cached .env
git rm -r --cached dist/
# 3) Commit
git commit -m "Stop tracking .env and dist"

La clave es --cached. Sin esta opción, git rm borra también el archivo de la carpeta de trabajo. Para directorios hace falta -r.

Encontrar archivos rastreados que coinciden con las reglas

Para ver qué queda afectado tras aplicar una plantilla nueva, usa el siguiente comando.

git ls-files -ci --exclude-standard

-c significa archivos rastreados, -i solo los que coinciden con las reglas de ignorar, y --exclude-standard aplica .gitignore, .git/info/exclude y la configuración global. Si la lista es correcta, puedes sacarlos del seguimiento de una vez.

# bash / zsh
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached --
# PowerShell
git -c core.quotePath=false ls-files -ci --exclude-standard | ForEach-Object { git rm --cached -- "$_" }

En la pestaña Dejar de rastrear del generador puedes crear estos comandos adaptados a tu shell.

Volver a aplicar todo

Si cambiaste mucho el .gitignore, también es habitual vaciar el índice y volver a añadir todo.

git rm -r --cached .
git add .
git commit -m "Apply .gitignore"

git add . vuelve a añadir aplicando las reglas de ignorar, así que los ignorados quedan fuera. Pero antes del commit revisa sin falta la lista de borrados con git status. En repositorios donde cambió la configuración de fin de línea (core.autocrlf), muchos archivos pueden aparecer como modificados.

Efecto sobre otras personas

Si haces push de un commit que deja de rastrear archivos, esos archivos se borran de la carpeta de trabajo de quien haga pull de ese commit. Para git, el archivo se ha eliminado del repositorio. Si son archivos que cada uno necesita, como .env o la configuración del IDE, avisa antes para que hagan copia de seguridad.

Si ya se hizo push de información secreta

Dejar de rastrear solo afecta a los commits futuros. En los commits pasados el archivo sigue ahí y cualquiera puede sacarlo del historial. El orden es el siguiente.

  1. Revoca primero las claves y contraseñas expuestas y emite otras nuevas. Esto es lo más importante.
  2. Saca el archivo del seguimiento y añádelo a .gitignore.
  3. Si hace falta, borra el archivo del historial con una herramienta como git filter-repo y haz push forzado. No se pueden borrar las copias ya clonadas o bifurcadas, así que esto no sustituye al paso 1.

assume-unchanged y skip-worktree no son funciones de ignorar

git update-index --assume-unchanged y --skip-worktree ocultan temporalmente los cambios de un archivo rastreado, pero el archivo sigue rastreándose.

La documentación de git también indica no usar estas opciones con el fin de ignorar cambios en archivos rastreados. Para archivos de configuración compartidos, lo seguro es confirmar config.example.json e ignorar el config.json real.

Referencias

← AnteriorReglas de ignorar propias con .git/info/exclude