← retour aux snippets

git: nettoyer les fichiers ignorés en toute sécurité

Supprimer les fichiers ignorés et non suivis avec dry-run et protections.


objectif

Nettoyer un dépôt en supprimant les artefacts générés (.log, build, cache) sans toucher aux fichiers suivis, avec aperçu avant suppression.

code minimal

# aperçu (dry-run) des fichiers ignorés qui seraient supprimés
git clean -Xdf -n

utilisation

# supprimer les fichiers ignorés (build, cache) après vérification
git clean -Xdf

# tout supprimer: ignorés ET non suivis (attention)
git clean -xdf

# mode interactif (confirmer fichier par fichier)
git clean -Xdi

# cibler des chemins précis (plus sûr)
git clean -Xdf -- ./dist/ ./node_modules/

# protéger des fichiers même s'ils sont ignorés (exclusion)
git clean -Xdf -e '.env' -e 'storage/*'

# remettre l'arbre dans un état parfaitement propre
git reset --hard HEAD
git clean -xdf

# traiter aussi les submodules
git submodule foreach --recursive 'git clean -Xdf'

variante(s) utile(s)

# voir ce que .gitignore ignore réellement
git check-ignore -v -- **/*

# supprimer uniquement les fichiers non suivis (garder les ignorés)
git clean -df -e '!*.gitignore' -e '!*/'  # ou simplement: git clean -df

# combiner avec des sauvegardes temporaires (archive)
git clean -Xdf -n | awk '{print $3}' | tar -T - -czf ignored-backup.tgz
git clean -Xdf

notes

  • -n fait un aperçu sans supprimer; lancez toujours cette commande avant l’exécution réelle.
  • -X ne supprime que ce qui est ignoré par .gitignore; -x supprime tout ce qui n’est pas suivi (plus agressif).
  • -d inclut les dossiers, -f est requis pour confirmer la suppression.
  • les fichiers suivis ne sont jamais supprimés par git clean. Pour annuler des modifications suivies, utilisez git restore --source=HEAD -- . ou git reset --hard.
  • pour des dépôts avec submodules, exécutez la commande dans chaque submodule (ou utilisez submodule foreach).