Suppression de plusieurs fichiers d'un git repo qui ont déjà été supprimés du disque

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

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

Comment puis-je supprimer ces fichiers de Git sans avoir à passer par la main et ajouter chaque fichier comme ceci:

git rm file1 file2 file3 file4

idéalement, je cherche quelque chose qui fonctionne de la même manière que git add . , si c'est possible.

1237
demandé sur Nick Volynkin 2009-01-29 20:18:14

28 réponses

Pour Git 1.x

$ git add -u

cela indique à git de mettre automatiquement en scène les fichiers suivis -- y compris la suppression des fichiers suivis précédemment.

Pour Git 2.0

pour mettre en scène tout votre arbre de travail:

$ git add -u :/

À la scène, tout le chemin actuel:

$ git add -u .
2221
répondu carl 2014-08-05 15:10:42
git ls-files --deleted -z | xargs -0 git rm 

peut-être ce que vous cherchez.. il fonctionne pour moi..

1337
répondu Varinder 2015-07-01 20:47:55

vous pouvez utiliser

git add -u

pour ajouter les fichiers supprimés à la zone d'arrêt, puis les propager""

git commit -m "Deleted files manually"
726
répondu Cody Caughlan 2009-01-29 17:25:48

Si vous exécutez simplement:

git add -u

git mettra à jour son index pour savoir que les fichiers que vous avez supprimés devraient faire partie de la prochaine propagation. Ensuite, vous pouvez lancer "git commit" pour vérifier ce changement.

ou, si vous courez:

git commit -a

il prend automatiquement ces modifications (et toutes autres) et les engage.

Update : si vous voulez ajouter supprimé fichiers, essayez:

git ls-files --deleted -z | xargs -0 git rm
git commit
354
répondu Emil Sit 2013-04-22 02:53:50

vous cherchez probablement-A:

git add -A

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

163
répondu Dustin 2009-01-29 18:10:14
"151920920 De" mettre en scène seule la supprimé "151940920 de fichiers":

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

Ou (le xargs):

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

Vous pouvez alias votre choix de jeu de commande, pratique pour un usage ultérieur.

92
répondu Saeb Amini 2018-07-16 06:42:47
git rm test.txt

avant ou après avoir supprimé le fichier.

60
répondu Peaker 2015-12-14 00:32:34

en utilisant git-add avec '--all' ou '--update' options vous pouvez obtenir plus que vous vouliez. Nouvelles et/ou les fichiers modifiés seront également ajoutés à l'index. J'ai un alias bash setup pour quand je veux supprimer des fichiers supprimés de git sans toucher aux autres fichiers:

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

tous les fichiers qui ont été supprimés du système de fichiers sont ajoutés à l'index tel que supprimé.

48
répondu zobie 2012-01-11 11:42:55

non pas que ce soit vraiment important, mais je ne suis pas d'accord avec la réponse choisie:

git add -u 

... va supprimer des fichiers de l'index si les fichiers correspondants dans l'arbre de travail ont été supprimés, mais il mettra également en scène le nouveau contenu modifié des fichiers suivis.

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

... sur l'autre main n'rm les fichiers supprimés qui ont été suivis.

donc ce dernier est à mon avis la meilleure option.

38
répondu Stephan Tual 2012-04-09 11:24:42

Si ceux-ci sont les seuls changements, vous pouvez simplement faire

git commit -a

pour effectuer tous les changements. Qui comprendra des fichiers supprimés.

28
répondu SpoonMeiser 2009-01-29 17:29:39
git ls-files --deleted | xargs git rm 

est la meilleure option pour ajouter seulement des fichiers supprimés.

Voici d'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
répondu Sijo Kurian 2012-10-01 19:36:48

git add-u

- u --mettre Ne comparez que les fichiers déjà suivis dans l'index plutôt que dans l'arbre de travail. Cela signifie qu'il ne sera jamais en scène de nouveaux fichiers, mais qu'il mettra en scène modifié nouveau contenu des dossiers et qu'il va supprimer les fichiers de l'index si les fichiers correspondant dans l'arbre de travail ont été supprimés.

S'il n'est donné, par défaut "."; en d'autres termes, mettre à jour tous les fichiers suivis dans le répertoire courant et ses sous-répertoires.

15
répondu Obay 2014-08-26 12:24:42

Cette solution simple fonctionne très bien pour moi:

git rm $(git ls-files --deleted)
14
répondu Husam Bdr 2015-11-06 13:32:13

Si vous voulez l'ajouter à votre .gitconfig faites ceci:

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

alors tout ce que vous avez à faire est d'exécuter:

git rma
10
répondu Evan Moran 2012-07-25 20:47:58
git ls-files --deleted -z | xargs -0 git rm --cached

cela supprimera tous les fichiers supprimés qui ont été précédemment suivis par git, ainsi que gérer le cas où vos noms de fichiers ont des espaces dans eux.

en fonction de votre variante POSIX, vous devrez peut-être utiliser xargs -0 -r : cela provoquera xargs à quitter gracieusement lorsque le contenu nul est pipé.

Les drapeaux

EDIT: --cached et --deleted sont utilisés en tandem pour se prémunir contre la suppression accidentelle de fichiers qui n'ont pas déjà été supprimé.

8
répondu Murphy Danger 2014-01-04 20:39:59

essayez.

-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
répondu ilgam 2015-03-09 15:05:17

s'il vous Plaît utiliser -t voir la commande est effectivement couru

je viens de modifier la réponse de Virender pour faire la même chose:

git ls-files --deleted -z | xargs -t -0 git rm
6
répondu Venkateswara Rao 2016-04-17 15:03:17

aucun des drapeaux à git-add ne mettra en scène les fichiers supprimés; si tout ce que vous avez modifié sont des fichiers supprimés, alors vous êtes bien, mais sinon, vous devez exécuter git-status et analyser la sortie.

travaillant à partir de la réponse de Jeremy, voici ce que j'ai eu:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. obtenir l'état des fichiers.
  2. pour les fichiers supprimés, isoler le nom du fichier.
  3. Supprimer toutes les lignes qui commencent par #s, ainsi qu'une ligne de statut qui avait le mot "supprimé" en elle; Je ne me souviens pas ce que c'était, exactement, et il n'est plus là, donc vous pouvez avoir à modifier ceci pour différentes situations. Je pense que le groupement des expressions pourrait être une fonctionnalité spécifique à GNU, donc si vous n'utilisez pas gnutils, vous pourriez avoir à ajouter plusieurs lignes grep -v .
  4. passe les fichiers à git rm .

coller ceci dans un shell alias maintenant...

5
répondu Xiong Chiamiov 2009-07-25 23:41:05

ce qui suit fonctionnera, même si vous avez beaucoup de fichiers à traiter:

git ls-files --deleted | xargs git rm

vous voudrez probablement aussi vous engager avec un commentaire.

pour plus de détails, voir: Useful Git Scripts

5
répondu l3x 2013-05-24 13:45:17

Comme mentionné

git add -u

traite les fichiers supprimés pour suppression, mais aussi les fichiers modifiés pour mise à jour.

pour dégrafer les fichiers modifiés que vous pouvez faire

git reset HEAD <path>

si vous aimez garder vos commits organisés et propres.

NOTE: cela pourrait également dégrafer les fichiers supprimés, donc attention avec ces caractères génériques.

4
répondu DarkNeuron 2013-01-30 16:35:42
git commit -m 'commit msg' $(git ls-files --deleted)

cela a fonctionné pour moi après que j'ai déjà supprimé les fichiers.

4
répondu Chad 2014-08-05 14:40:38

j'avais besoin de la même et utilisé git gui "stade changé" bouton. il ajoute aussi tout.

et après" stage changed "j'ai fait" commit"...

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

3
répondu Serdar 2011-11-15 14:29:42

Vous pouvez utiliser git add -u <filenames> pour mettre en scène les fichiers supprimés.

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

Le -u est nécessaire afin de consulter les fichiers qui existent dans le référentiel, mais n'existent plus dans le répertoire de travail. Sinon, la valeur par défaut de git add est de rechercher les fichiers dans le répertoire de travail, et si vous spécifiez des fichiers que vous avez effacés, il ne les trouvera pas.

2
répondu thomasrutter 2013-03-07 01:29:28

quelque chose comme

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

peut le faire.

1
répondu Jeremy French 2013-12-02 10:25:52

ajout d'un pseudonyme de système pour la mise en scène de fichiers supprimés en tant que commande 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
répondu Haris Krajina 2014-02-19 12:16:55

(une autre variante)

je voulais supprimer tous les fichiers déjà supprimés des fichiers disques, mais d'un dossier spécifique, laissant les autres dossiers intacts. Ce qui suit a fonctionné pour moi:

git ls-files --deleted  | grep <folder-name> | xargs git rm
1
répondu urban 2016-11-23 10:32:10

Pour projet visual studio

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

qui est utile lorsque le chemin du fichier supprimé A de l'espace

0
répondu Sawyer 2014-02-04 15:34:59

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

git cola

et sélectionnez tous les fichiers supprimés que je veux mettre en scène.

(notez que je fais habituellement tout en ligne de commande dans git, mais git gère les fichiers supprimés un peu maladroits).

-2
répondu Broes De Cat 2012-10-03 14:28:18