web-dev-qa-db-fra.com

git rm - fatal: pathspec ne correspond à aucun fichier

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.

57
Maxim Yefremov

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.

  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 de filtre terminée, vérifiez qu'aucun fichier inattendu n'a été perdu.

  3. Maintenant, ajoutez une règle .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é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 .

64
mu 無

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.

6
Bharti Rawat

é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.

5
klmlfl

Ces chaînes fonctionnent dans mon cas:

  1. git rm -r WebApplication/packages

Il y avait un dialogue de confirmation git. Vous devriez choisir l'option "y".

  1. git commit -m "blabla"
  2. git Push -f Origin <ur_branch>
1
Ustin
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.

1
user1767316