J'ai ajouté plus de 9 000 photos par accident à mon dossier de projet. Et les a commis. Puis les a supprimés du disque. Engagé.
Maintenant, j'essaie de pousser les modifications sur le serveur git. Mais cela prend trop de temps et tente d'envoyer 12 Gb de données.
J'ai vérifié la taille des fichiers sur le disque et je me suis rendu compte que le dossier .git
Nécessitait 12 Go.
Comment supprimer des photos à partir de là? J'ai essayé git rm
, Mais j'ai échoué:
❯ git rm public/photos
fatal: pathspec 'public/photos' did not match any files
Parce que je les ai déjà supprimés du disque, mais ils sont toujours dans le dossier .git
.
J'ai essayé d'ajouter public/photos
À .gitignore
:
public/photos/
*.Zip
Mais pas de résultat. Bien sûr, je pouvais hard reset head
Au moment où je n'avais pas autant de photos indésirables dans mon projet. Mais depuis ce temps, je me suis engagé plusieurs fois et ai apporté beaucoup de changements au code.
Dans votre cas, utilisez git filter-branch
au lieu de git rm
.
git rm
supprimera les fichiers dans le sens où ils ne seront plus suivis par git, mais cela ne supprimera pas les anciens objets de validation correspondant à ces images, et vous serez donc toujours obligé de pousser les validations antérieures correspondant à 12 Go de images.
Le git filter-branch
, en revanche, peut également supprimer ces fichiers de tous les commits précédents, éliminant ainsi le besoin de pousser l'un d'entre eux.
Utilisez la commande
git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch public/photos' \
--Prune-empty --tag-name-filter cat -- --all
Une fois la branche de filtre terminée, vérifiez qu'aucun fichier inattendu n'a été perdu.
Maintenant, ajoutez une règle .gitignore
echo public/photos >> .gitignore
git add .gitignore && git commit -m "ignore rule for photos"
Maintenant faire un push
git Push -f Origin branch
Vérifiez this , this et this pour obtenir de l'aide supplémentaire. Par souci de sécurité, je vous suggère de créer une copie de sauvegarde du référentiel sur votre système avant de suivre ces instructions.
Quant à votre message d'erreur original, il se produit parce que vous les avez déjà décompressés en utilisant git rm
, et donc git se plaint car il ne peut pas supprimer un fichier qu’il ne suit pas. Lire plus à ce sujet ici .
Une réponse très simple est.
étape 1:
Ajoutez d’abord vos fichiers non suivis que vous souhaitez supprimer à l’aide de git add .
ou git add <filename>
.
étape 2:
Puis supprimez-les facilement en utilisant la commande git rm -f <filename>
ici rm= supprimer et - f= forcely.
étape 1
Ajoutez le (s) nom (s) de fichier à votre .gitignore
fichier.
étape 2
git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch YOURFILE' \
--Prune-empty --tag-name-filter cat -- --all
étape
git Push -f Origin branch
Un grand merci à @mu.
Ces chaînes fonctionnent dans mon cas:
git rm -r WebApplication/packages
Il y avait un dialogue de confirmation git. Vous devriez choisir l'option "y".
git commit -m "blabla"
git Push -f Origin <ur_branch>
git stash
a fait le travail, il a restauré les fichiers que j'avais supprimés en utilisant rm
au lieu de git rm
.
J'ai d'abord vérifié le dernier hash, mais je ne crois pas que ce soit nécessaire.