Suppression de plusieurs fichiers du référentiel Git déjà supprimés du disque

J'ai un repo Git que j'ai supprimé quatre fichiers avec rm ( pas git rm ), et mon statut Git ressemble à ceci:

 # deleted: file1.txt # deleted: file2.txt # deleted: file3.txt # deleted: file4.txt 

Comment supprimer ces fichiers de Git sans avoir à aller manuellement et ajouter chaque fichier comme suit:

 git rm file1 file2 file3 file4 

Idéalement, je recherche quelque chose qui fonctionne comme git add . si possible

1246
29 янв. Codebeef est défini le 29 janvier 2009-01-29 20:18 '09 à 20:18 2009-01-29 20:18
@ 29 réponses

Pour Git 1.x

 $ git add -u 

Cela signifie que Git suit automatiquement les fichiers, y compris en supprimant les fichiers précédemment suivis.

Pour git 2.0

Pour construire tout l’arbre de travail:

 $ git add -u :/ 

Pour n'exécuter que le chemin actuel:

 $ git add -u . 
2232
10 сент. réponse donnée par carl 10 sept. 2009-09-10 03:13 '09 à 3:13 le 2009-09-10 03:13
 git ls-files --deleted -z | xargs -0 git rm 
border=0

Peut-être que vous cherchez .. ça marche pour moi ..

1339
28 февр. Réponse donnée par Varinder le 28 février 2011-02-28 23:21 '11 à 23h21 2011-02-28 23:21

Vous pouvez utiliser

 git add -u 

Pour ajouter des fichiers supprimés à la zone de transfert, puis copiez-les

 git commit -m "Deleted files manually" 
726
29 янв. Réponse donnée par Cody Caughlan le 29 janvier 2009-01-29 20:25 '09 à 20:25 2009-01-29 20:25

Si vous venez de courir:

 git add -u 

git mettra à jour son index pour savoir que les fichiers que vous avez supprimés doivent réellement faire partie du prochain commit. Ensuite, vous pouvez exécuter "git commit" pour vérifier cette modification.

Ou, si vous courez:

 git commit -a 

Il acceptera automatiquement ces modifications (et toutes les autres) et les corrigera.

Mettre à jour. Si vous souhaitez uniquement ajouter des fichiers supprimés, essayez:

 git ls-files --deleted -z | xargs -0 git rm git commit 
354
10 сент. La réponse est donnée par Emil Sit, le 10 septembre. 2009-09-10 03:15 '09 à 03h15 2009-09-10 03:15

Vous pourriez être à la recherche de -A:

 git add -A 

Ceci est similaire à git add -u, mais ajoute également de nouveaux fichiers. C'est à peu près équivalent à la addremove hg addremove (bien que la détection de mouvement soit automatique).

163
29 янв. La réponse est donnée par Dustin le 29 janvier. 2009-01-29 21:10 '09 à 21h10 2009-01-29 21:10

Pour préparer uniquement les fichiers supprimés:

 for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done 

Ou (méthode xargs):

 git status | awk '/deleted/ {print $2}' | xargs git rm 

Vous pouvez utiliser l' alias du jeu de commandes préféré pour une utilisation ultérieure pratique.

92
26 нояб. la réponse est donnée à Saeb Amini le 26 novembre 2011-11-26 13:34 '11 à 13:34 2011-11-26 13:34
 git rm test.txt 

Avant ou après la suppression du fichier actuel.

60
10 сент. Répondre Peaker 10 sept. 2009-09-10 03:13 '09 à 3:13 le 2009-09-10 03:13

En utilisant git -add avec les paramètres '--all' ou '--update', vous pouvez obtenir plus que vous ne le souhaitez. Les fichiers nouveaux et / ou modifiés seront également ajoutés à l'index. J'ai un paramètre d'alias bash lorsque je veux supprimer des fichiers supprimés de git sans toucher à d'autres fichiers:

 alias grma='git ls-files --deleted -z | xargs -0 git rm' 

Tous les fichiers supprimés du système de fichiers sont ajoutés à l'index comme étant supprimés.

48
31 янв. la réponse est donnée zobie 31 janvier 2009-01-31 07:50 '09 à 7h50 2009-01-31 07:50

Non pas que cela compte vraiment, mais je ne suis pas d'accord avec la réponse choisie:

 git add -u 

... supprimera les fichiers de l'index si les fichiers correspondants de l'arborescence de travail ont été supprimés, mais sera également soumis au nouveau contenu modifié des fichiers surveillés.

 git rm $(git ls-files --deleted) 

... d'autre part, il n'y aura que les fichiers supprimés qui ont été suivis.

Donc, le dernier, à mon avis, la meilleure option.

38
09 апр. Réponse donnée par Stephan Tual le 09 avril 2012-04-09 14:24 '12 à 14h24 2012-04-09 14:24

Si ce sont les seuls changements que vous pouvez faire

 git commit -a 

commettre tous les changements. Cela inclura les fichiers supprimés.

28
29 янв. la réponse est donnée par SpoonMeiser le 29 janvier 2009-01-29 20:29 '09 à 20:29 2009-01-29 20:29
 git ls-files --deleted | xargs git rm 

- La meilleure option pour ajouter uniquement des fichiers supprimés.

Voici quelques autres options.

 git add . => Add all (tracked and modified)/new files in the working tree. git add -u => Add all modified/removed files which are tracked. git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree. git commit -a -m "commit message" - Add and commit modified/removed files which are tracked. 
19
01 окт. Réponse donnée par Sijo Kurian Oct 01 2012-10-01 22:36 '12 à 22h36 2012-10-01 22:36

git add -u

-u --Update Ne fait correspondre que les fichiers déjà suivis dans l'index, pas l'arborescence de travail. Cela signifie qu'il ne créera jamais de nouveaux fichiers, mais que le nouveau contenu des fichiers surveillés sera modifié et qu'il supprimera les fichiers de l'index si les fichiers correspondants de l'arborescence de travail ont été supprimés.

Sinon, la valeur par défaut est "."; en d'autres termes, mettez à jour tous les fichiers surveillés du répertoire actuel et de ses sous-répertoires.

15
26 авг. la réponse est donnée à Obay 26 août. 2014-08-26 15:24 14 à 15:24 2014-08-26 15:24

Cette solution simple est idéale pour moi:

 git rm $(git ls-files --deleted) 
14
06 нояб. La réponse est donnée par Husam Bdr 06 nov. 2015-11-06 16:32 '15 à 16:32 2015-11-06 16:32

Si vous souhaitez l'ajouter à votre .gitconfig , procédez comme suit:

 [alias] rma = !git ls-files --deleted -z | xargs -0 git rm 

Alors tout ce que vous avez à faire est de courir:

 git rma 
10
25 июля '12 в 23:47 2012-07-25 23:47 la réponse est donnée par Evan Moran le 25 juillet '12 à 23:47 2012-07-25 23:47
 git ls-files --deleted -z | xargs -0 git rm --cached 

Cela supprimera tous les fichiers supprimés précédemment suivis avec git et gérera le cas s’il ya des espaces dans vos noms.

En fonction de votre version POSIX, vous devrez peut-être utiliser xargs -0 -r : cela entraînera une xargs de xargs sans contenu.

EDIT: Les --cached et --deleted sont utilisées en même temps pour protéger contre la suppression accidentelle de fichiers qui n'ont pas encore été supprimés.

8
04 янв. La réponse est donnée à Murphy Danger le 4 janvier. 2014-01-04 23:34 14 à 23:34 2014-01-04 23:34

Essayez-le

 -a --all Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected. git add .  git commit -m -a "Your commit" 

ou

 git add --all  git commit -m "Your commit" 
6
09 марта '15 в 18:05 2015-03-09 18:05 la réponse est donnée ilgam le 09 mars 2015 à 18:05 2015-03-09 18:05

Veuillez utiliser -t pour voir quelle commande est en cours d'exécution.

Je viens de changer la réponse de Wyrder pour faire la même chose:

 git ls-files --deleted -z | xargs -t -0 git rm 
6
17 апр. Réponse donnée par Venkateswara Rao le 17 avril 2016-04-17 18:00 '16 à 18h 2016-04-17 18:00

Ce qui suit fonctionnera même si vous avez plusieurs fichiers à traiter:

 git ls-files --deleted | xargs git rm 

Vous voudrez probablement aussi laisser un commentaire.

Voir aussi: Scripts utiles Git

5
24 мая '13 в 16:45 2013-05-24 16:45 la réponse est donnée le l3x le 24 mai 13h à 16h45 2013-05-24 16:45

Aucun des drapeaux dans git -add ne supprimera que les fichiers supprimés; si tous les fichiers que vous avez modifiés étaient des fichiers supprimés, tout va bien, mais sinon, vous devez exécuter git -status et analyser le résultat.

Travailler la réponse à Jeremy, c'est ce que j'ai eu:

 git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm 
  • Obtenir le statut du fichier.
  • Pour les fichiers supprimés, mettez en surbrillance le nom du fichier.
  • Supprimez toutes les lignes commençant par C #, ainsi que la barre d'état avec le mot "supprimé"; Je ne me souviens plus de ce que c’était, et c’est le cas. Vous devrez peut-être le changer pour différentes situations. Je pense que le groupe d'expressions peut être spécifique à GNU, donc si vous n'utilisez pas gnutils, vous devrez peut-être ajouter quelques lignes de grep -v .
  • Transférer des fichiers vers git rm .

Collez ceci dans l'alias du shell ...

5
26 июля '09 в 2:41 2009-07-26 02:41 la réponse est donnée par Xiong Chiamiov le 26 juillet 2009 à 02:41 . 2009-07-26 02:41

Comme mentionné

 git add -u 

supprime les fichiers supprimés pour la suppression, MAIS AUSSI les fichiers modifiés pour la mise à jour.

Pour désactiver les fichiers modifiés, vous pouvez

 git reset HEAD <path> 

si vous voulez que vos engagements soient organisés et propres.
REMARQUE: Il est également possible que des fichiers supprimés soient supprimés. Soyez donc prudent avec ces caractères génériques.

4
21 февр. la réponse est donnée à DarkNeuron le 21 février 2012-02-21 21:43 '12 à 21:43 2012-02-21 21:43
 git commit -m 'commit msg' $(git ls-files --deleted) 

Cela a fonctionné pour moi après avoir supprimé les fichiers.

4
05 авг. la réponse est donnée à Chad 05 août. 2014-08-05 17:40 '14 à 17:40 2014-08-05 17:40

J'avais besoin de la même chose et utilisais le bouton "changé changé" de git gui. il ajoute aussi tout.

Et après le "changement de stade", j'ai fait un "commit" ...

donc mon répertoire de travail est effacé à nouveau.

3
15 нояб. la réponse est donnée par Serdar le 15 novembre 2011-11-15 17:29 '11 à 17:29 2011-11-15 17:29

Vous pouvez utiliser git add -u <filenames> pour ne placer que les fichiers supprimés.

Par exemple, si vous avez supprimé les fichiers templates/*.tpl , utilisez git add -u templates/*.tpl .

-u est requis pour accéder aux fichiers existant dans le référentiel mais n'existant plus dans le répertoire de travail. Sinon, par défaut, git add recherchera les fichiers du répertoire de travail et, si vous spécifiez les fichiers que vous avez supprimés, ils ne les trouveront pas.

2
07 марта '13 в 4:29 2013-03-07 04:29 la réponse est donnée par thomasrutter le 07 mars 13 à 04:29 2013-03-07 04:29

(Un autre changement)

Je voulais supprimer tout ce qui avait déjà été supprimé des fichiers du disque, mais d'un dossier spécifique, en laissant les autres dossiers intacts. Ce qui suit a fonctionné pour moi:

 git ls-files --deleted | grep <folder-name> | xargs git rm 
1
23 нояб. réponse donnée urbaine le 23 novembre 2016-11-23 13:32 '16 à 13h32 2016-11-23 13:32

quelque chose comme

 git status | sed -s "s/^.*deleted: //" | xargs git rm 

peut le faire.

1
29 янв. Jeremy French répond le 29 janvier 2009-01-29 20:28 '09 à 20:28 2009-01-29 20:28

Ajout d'un alias système pour placer les fichiers supprimés en tant que rm-all

UNIX alias rm-all='git rm $(git ls-files --deleted)'

WINDOWS doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

Note

Windows doit avoir bash installé.

1
19 февр. La réponse est donnée par Haris Krajina le 19 février. 2014-02-19 15:16 14 à 15:16 2014-02-19 15:16

Pour un projet de studio visuel

 'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

ce qui est utile lorsque le chemin du fichier distant a un espace

0
04 февр. Réponse donnée par Sawyer le 04 février. 2014-02-04 18:34 '14 à 18:34 2014-02-04 18:34
 git rm $(git ls-files -d) 

Supprime tous les fichiers répertoriés par la commande git ls-files (-d affiche uniquement les fichiers supprimés). Ne fonctionne pas pour les fichiers avec des espaces dans le nom de fichier ou le chemin, mais rappelez-vous

0
10 дек. réponse donnée A. Albershteyn 10 déc. 2018-12-10 11:19 '18 à 11h19 . 2018-12-10 11h19

La solution la plus flexible que j'ai trouvée à ce jour est

 git cola 

Et sélectionnez tous les fichiers supprimés que je veux exécuter.

(Remarque. Je fais habituellement toute la ligne de commande dans git, mais git gère les fichiers supprimés un peu gênant).

-1
03 окт. La réponse est donnée par Broes De Cat le 03 octobre. 2012-10-03 17:28 '12 à 17:28 2012-10-03 17:28

Autres questions sur les balises ou Poser une question