git rm-fatal: pathspec ne correspond à aucun fichier

j'ai ajouté plus de 9000 photos par accident à mon dossier de projet. Et les a commis. Puis les a effacés du disque. Engager.

maintenant j'essaie de pousser les modifications sur Git server. Mais il prend trop de temps et essaie d'envoyer 12 Go de données.

j'ai vérifié la taille des fichiers sur le disque et je vois que vraiment le dossier .git prend 12 Go.

comment supprimer les photos de là? J'ai essayé git rm , mais ça ne marche pas.:

❯ git rm public/photos
fatal: pathspec 'public/photos' did not match any files

parce que je les ai déjà effacé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 pourrais hard reset head à l'instant où je n'ai pas eu autant de photos de camelote dans mon projet. Mais depuis, je me suis engagé à plusieurs reprises et j'ai fait beaucoup de changements dans le code.

43
demandé sur David Parks 2014-08-23 08:00:32

5 réponses

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 commit correspondant à ces images, et donc vous serez toujours coincé à pousser les premières propagations qui correspondent à 12 Go d'images.

le git filter-branch , d'autre part, peut supprimer ces fichiers de tous la précédente s'engage ainsi, s'éloignant de la nécessité de pousser l'un d'eux.

  1. utilisez la commande

    git filter-branch --force --index-filter \
      'git rm -r --cached --ignore-unmatch public/photos' \
      --prune-empty --tag-name-filter cat -- --all
    
  2. une fois la branche filtrante terminée, vérifier qu'aucun fichier inattendu n'a été perdu.

  3. ajouter maintenant A.règle de gitignore

    echo public/photos >> .gitignore
    git add .gitignore && git commit -m "ignore rule for photos"
    
  4. Maintenant faire un " push

    git push -f origin branch
    

Vérifier ce , ce et ce pour obtenir de l'aide. Juste pour être sur le côté plus sûr, je vous suggérerais de créer une copie de sauvegarde du rapport sur votre système avant d'aller de l'avant avec ces instructions.

quant à votre message d'erreur original, il se produit parce que vous les avez déjà déverrouillés en utilisant git rm , et donc git se plaint parce qu'il ne peut pas supprimer un fichier qu'il ne suit pas. Lire pour en savoir plus, cliquez ici .

49
répondu mu 無 2017-05-23 12:26:21

une réponse très simple est.

Étape 1:

ajoutez D'abord vos fichiers non tracés que vous souhaitez supprimer en utilisant git add . ou git add <filename> .

Étape 2:

puis les supprimer facilement en utilisant la commande git rm -f <filename> ici rm =supprimer et - f =forcer.

2
répondu Bharti Rawat 2016-10-20 11:13:55

Étape 1

ajoutez le(S) nom (s) de fichier à votre fichier .gitignore .

Étape 2

git filter-branch --force --index-filter \
    'git rm -r --cached --ignore-unmatch YOURFILE' \
    --prune-empty --tag-name-filter cat -- --all

Étape 3

git push -f origin branch

Un grand merci à @mu.

1
répondu klmlfl 2016-06-04 08:55:09
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 fait une vérification du dernier hachage, mais je ne crois pas que ce soit nécessaire.

0
répondu user1767316 2018-05-28 15:36:31

cette chaîne fonctionne dans mon cas:

  1. git rm -r WebApplication/packages

il y avait une boîte de dialogue de confirmation. Vous devriez choisir" y " option.

  1. git commit -m "blabla"
  2. git push -f origin <ur_branch>
0
répondu Ustin 2018-06-04 15:22:50