78 votes

Supprimer complètement les fichiers de repo Git et à distance sur GitHub

Par accident, j'ai ajouté un dossier d'images et de commis. Ensuite, j'ai fait une de plus s'engager. Ensuite, j'ai supprimé ces fichiers à l'aide de git rm -f ./images et engage de nouveau.

Maintenant, j'ai fait beaucoup plus s'engage dans cette branche (master). Dans ma TÊTE, je n'ai pas que ./static/images le dossier.

Pour cette raison, mon repo taille a augmenté énormément. Comment puis-je supprimer ces gouttes complètement? Et je veux le supprimer de ma télécommande dépôt GitHub.

125voto

Darhuuk Points 4862

C'est ce que vous cherchez: ignorant ne pas supprimer un fichier. Je vous conseille de lire cette page, mais voici la commande à utiliser:

git filter-branch --index-filter \
'git rm -r --cached --ignore-unmatch <file/dir>' HEAD

Aussi, pour supprimer tous les fichiers supprimés à partir de caches git crée, utilisez:

rm -rf .git/refs/original/ && \
git reflog expire --all && \
git gc --aggressive --prune

Vous pouvez trouver plus d'informations à propos de la dernière commande, ainsi que d'un script qui fait tout ce que vous voulez en une seule action, ici: git: forever supprimer des fichiers ou des dossiers à partir de l'histoire.

Un autre des liens avec de nombreuses explications: Supprimer des données sensibles.

[Modifier] voir Aussi ce StackOverflow question: Supprimer des fichiers sensibles et de leurs commits Git de l'histoire.

(Les commandes copié à partir d' natacado's réponse à la question ci-dessus.) Si vous avez déjà supprimé les fichiers de la copie de travail, les éléments suivants doivent travailler. Trouver la valeur de hachage pour le commit qui a ajouté les fichiers indésirables. Ensuite il faut faire:

git filter-branch --index-filter \
'git update-index --remove filename' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force

9voto

RJFalconer Points 2678

Vous pouvez simplement rebase l'ensemble de votre branche et de supprimer à la fois le commit qui a ajouté les images et de les engager à les faire enlever.

git rebase -i master

Vous seront présentés avec une liste de commits. Supprimer les lignes qui ont le voleur commet vous souhaitez supprimer. ("dd" supprime une ligne dans vim, l'éditeur par défaut. Puis enregistrez avec ZZ)

Le balançant s'engage ensuite être nettoyé dans le cours naturel git la collecte des ordures, un processus que vous pouvez forcer avec la commande donnée dans Darhuuk de réponse.

Edit: Cela fonctionne même si vous ont poussé à un dépôt distant, mais vous aurez à pousser avec --force. (La même chose s'applique à la git filter-branch de la solution).

Notez que cela va être très ennuyeux pour quelqu'un qui a tiré de votre branche. Ils devraient consulter "la récupération de l'amont rebase".


Sans doute votre origine accidentelle de plus d'images fait partie d'un commit que vous voulez conserver. Dans ce cas, vous devez modifier le commis pendant le rebase pour diviser les parties que vous souhaitez conserver. Vous pouvez le faire par le remplacement de "choisir" dans le "rebase -i" liste pour s'engager avec un "e" (pour le modifier). Le processus de rebase va s'arrêter ici, et vous pouvez fractionner la livraison avec "git commit --ammend".

4voto

drzaus Points 3344

Je suis essentiellement de répéter la réponse combinée avec ce Windows formatage de mise en garde, seulement il n'a pas perdu comme un commentaire.

Notez l'utilisation de guillemets plutôt que de simples citations, car il dépend du shell que vous utilisez comment les chaînes sont analysées.

Seule Ligne:

git filter-branch --index-filter "git rm -r --cached --ignore-unmatch <file/dir>" HEAD

Plusieurs Lignes:

git filter-branch --index-filter \
    "git rm -r --cached --ignore-unmatch <file/dir>" HEAD

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X