J'ai commit avec l'ID 56f06019 (par exemple). Dans ce commit, j'ai accidentellement commis un gros fichier (50 Mo). Dans un autre commit, j'ajoute le même fichier mais dans la bonne taille (petit). Maintenant, mon dépôt lorsque je cloné est trop lourd: (Comment supprimer ce gros fichier de l'historique du dépôt pour réduire la taille de mon dépôt?
113
Réponses:
Le chapitre 9 du livre Pro Git contient une section sur la suppression d'objets .
Permettez-moi de décrire brièvement les étapes ici:
Comme l'option de rebasage décrite précédemment,
filter-branch
est l'opération de réécriture. Si vous avez publié l'historique, vous devrez--force
pousser les nouvelles références.L'
filter-branch
approche est considérablement plus puissante que l'rebase
approche, car ellefilter-branch
conserve également les sauvegardes, de sorte que la taille du dépôt ne diminuera pas immédiatement à moins que vous n'expiriez les reflogs et le ramasse-miettes:la source
git filter-branch --force --index-filter 'git rm --ignore-unmatch --cached PathTo/MyFile/ToRemove.dll' -- fbf28b005^..
Ensuiterm --recursive --force .git/refs/original
,rm --recursive --force .git/logs
j'ai utilisé legit prune --expire now
etgit gc --aggressive
cela a mieux fonctionné pour moi que vos étapes exactes énumérées ci-dessus. Merci d'avoir inclus le lien vers le livre Git Pro car il était inestimable.Vous pouvez utiliser l' outil git-extras . La commande obliterate supprime complètement un fichier du référentiel, y compris les anciens commits et balises.
https://github.com/tj/git-extras/blob/master/Commands.md
la source
Vous aurez besoin de git rebase en mode interactif voir un exemple ici: Comment puis-je supprimer un commit sur GitHub? et comment supprimer les anciens commits .
Si votre commit est à HEAD moins 10 commits:
Après l'édition de votre historique, vous devez pousser le "nouvel" historique, vous devez ajouter le
+
to force (voir la refspec dans les options push ):Si d'autres personnes ont déjà cloné votre référentiel, vous devrez les informer, car vous venez de modifier l'historique.
la source
git push --force
ougit push -f
(qui ne nécessite pas que les gens de connaître la cible de poussée de la branche)git rm
sur le chemin.J'ai essayé d'utiliser la réponse suivante sur Windows https://stackoverflow.com/a/8741530/8461756
Les guillemets simples ne fonctionnent pas sous Windows, vous avez besoin de guillemets doubles.
La suite a fonctionné pour moi.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PathRelativeRepositoryRoot / bigfile.csv" - --all
Après avoir supprimé le gros fichier, j'ai pu transmettre mes modifications à github master.
la source
Vous pouvez utiliser une simple commande pour supprimer
la source