Supprimez complètement les fichiers de Git repo et remote sur GitHub
j'ai accidentellement ajouté un dossier d'images et commis. Ensuite, j'ai fait une de plus s'engager.
Puis j'ai retiré ces fichiers en utilisant git rm -f ./images
et je les ai engagés à nouveau.
en ce moment, j'ai fait beaucoup plus s'engage dans cette branche (master). Dans ma tête, je n'ai pas ce dossier ./static/images
.
pour cette raison, ma taille de pension a beaucoup augmenté. Comment puis-je enlever ces taches complètement? Et je veux l'enlever de ma télécommande GitHub repo aussi.
3 réponses
C'est ce que vous recherchez: ignorer ne supprime pas un fichier . Je vous suggère de lire cette page, mais voici la commande spécifique à utiliser:
git filter-branch --index-filter \
'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
aussi, pour supprimer tous les fichiers supprimés des caches que git crée, utilisez:
rm -rf .git/refs/original/ && \
git reflog expire --all && \
git gc --aggressive --prune
vous pouvez trouver plus d'informations sur la dernière commande, ainsi qu'un script qui fait tout ce que vous voulez en une seule action, ici: git: pour toujours supprimer des fichiers ou les dossiers de l'histoire .
un autre lien avec beaucoup d'explications: supprimer les données sensibles .
[Edit] Voir aussi cette question StackOverflow: supprimer les fichiers sensibles et leurs commits de l'historique Git .
(commandes copiées de la réponse de natacado
dans la question liée ci-dessus.) Si vous avez déjà supprimé les fichiers de travail la copie, la suivante devrait fonctionner. Découvrez le hachage pour la propagation qui a ajouté les fichiers indésirables. Puis faire:
git filter-branch --index-filter \
'git update-index --remove filename' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force
vous pouvez simplement rebaser toute votre branche et supprimer à la fois le commit qui a ajouté les images et le commit qui les a supprimés.
git rebase -i master
vous recevrez 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 sauvegarder avec ZZ)
les charges pendantes seront ensuite nettoyées au cours de la collecte des ordures naturelles git, un processus que vous pouvez force avec le commandement donné dans la réponse de Darhuuk.
Edit: cela fonctionnera même si vous avez poussé vers un dépôt distant, mais vous devrez pousser avec --force. (Il en va de même pour la solution git filter-branch).
notez que cela sera très ennuyeux pour quiconque a retiré de votre branche. Ils doivent consulter "récupérer de rebase amont" .
probablement votre ajout accidentel d'images fait partie d'un commit que vous souhaitez conserver. Dans ce cas, vous devez modifier le commis pendant le rebase pour diviser les parties que vous souhaitez conserver. Vous pouvez le faire en remplaçant "pick" dans la liste "rebase-i" pour ce commit par " e " (pour edit). Le processus de rebase s'arrêtera ici et vous pouvez partager la propagation avec "git commit --amend".
je répète essentiellement la réponse combiné avec ce Windows formatting caveat , seulement pour qu'il ne se perd pas comme un commentaire.
notez l'utilisation de guillemets doubles plutôt que de guillemets simples, car cela dépend de l'interpréteur de commandes que vous utilisez pour analyser les chaînes.
Une Seule Ligne:
git filter-branch --index-filter "git rm -r --cached --ignore-unmatch <file/dir>" HEAD
Lignes Multiples:
git filter-branch --index-filter \
"git rm -r --cached --ignore-unmatch <file/dir>" HEAD