Fabrice Planchette

Supprimer un fichier versionné dans git

Jul 2, 2020

Que celui qui n’a jamais commit/push un groooooos fichier me jette la première pierre (ou une PR…) ! Alors laisse-moi te donner la commande pour réparer cette énorme bêtise.

Cette commande, j’en ai eu besoin une fois (une seule promis) et franchement, c’est pas le genre de truc que tu retiens par par coeur…

L’idée est de parcourir chaque commit/branche du projet à la recherche de ce maudit fichier pour le supprimer de l’index.

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <<PATH_FILE_TO_REMOVE>>' --prune-empty --tag-name-filter cat -- --all
rm -rf .git/refs/original/ rm -rf .git/logs/
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push --force origin master

T’as vu, c’est le genre de commande, aussitôt lu, aussitôt oublié. Donc juste utile dans un bookmark.

Et tant que je suis lancé, je te donne aussi la commande qui va te lister les fichiers par ordre de poids. Bah ouai, malin, ça fait un combo avec la commande précédente ;)

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- \
| numfmt --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

Sympa hein :)