Supprimer un fichier dans l’historique de git

Un moment d’inatention et hop, un fichier de plusieurs mégaoctets se retrouve dans le dépot.

Afficher la taille de tous les fichiers de l’historique

git rev-list --objects --all |
  git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' |
  sed -n 's/^blob //p' |
  sort --numeric-sort --key=2 |
  cut -c 1-12,41- |
  $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

Pour le supprimer de tout l’historique, il faut commencer par repérer un commit où il n’existe pas, par exemple bon-commit.

Ensuite, passer la commande

git filter-branch --index-filter 'git rm --cached --ignore-unmatch nom_du_fichier' bon-commit..HEAD