Question

J'ai un dépôt Git dont j'ai supprimé quatre fichiers avec rm ( pas git rm), et mon état Git se présente comme suit:

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

Comment puis-je supprimer ces fichiers de Git sans avoir à passer manuellement et ajouter chaque fichier de la manière suivante:

git rm file1 file2 file3 file4

Idéalement, je recherche quelque chose qui fonctionne de la même manière que git add . si, si cela est possible.

Était-ce utile?

La solution

Pour Git 1.x

$ git add -u

Ceci indique à git de placer automatiquement les fichiers suivis, y compris la suppression des fichiers déjà suivis.

Pour Git 2.0

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

$ git add -u :/

Pour définir uniquement le chemin actuel:

$ git add -u .

Autres conseils

git ls-files --deleted -z | xargs -0 git rm 

pourrait être ce que vous cherchez .. cela fonctionne pour moi ..

Vous pouvez utiliser

git add -u

Pour ajouter les fichiers supprimés à la zone de transit, puis les valider

git commit -m "Deleted files manually"

Si vous exécutez simplement:

git add -u

git mettra à jour son index pour savoir que les fichiers que vous avez supprimés doivent réellement faire partie de la prochaine validation. Ensuite, vous pouvez exécuter & Quot; git commit & Quot; pour vérifier ce changement.

Ou, si vous exécutez:

git commit -a

Il prendra automatiquement ces modifications (et toutes les autres) et les validera.

Mise à jour : si vous souhaitez uniquement ajouter des fichiers supprimés, essayez:

git ls-files --deleted -z | xargs -0 git rm
git commit

Vous recherchez probablement -A:

git add -A

cela ressemble à git add -u, mais ajoute également 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).

Pour organiser uniquement les fichiers supprimés :

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

Ou (à la manière xargs):

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

Vous pouvez alias votre jeu de commandes préféré pour une utilisation ultérieure simplifiée .

git rm test.txt

Avant ou après la suppression du fichier réel.

En utilisant git-add avec les options '--all' ou '--update', vous obtiendrez peut-être plus que ce que vous souhaitiez. Les fichiers nouveaux et / ou modifiés seront également ajoutés à l'index. J'ai installé un 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 après avoir été supprimés.

Ce n’est pas vraiment important, 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 mettra également en scène le nouveau contenu modifié des fichiers suivis.

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

... d'autre part ne récupérera que les fichiers supprimés qui ont été suivis.

Donc, ce dernier est à mon avis la meilleure option.

Si ce sont les seuls changements, vous pouvez simplement faire

git commit -a

pour valider toutes les modifications. Cela inclura les fichiers supprimés.

git ls-files --deleted | xargs git rm 

est la meilleure option pour ajouter uniquement les 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.

git add -u

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

Si non, la valeur par défaut est & ";". & ";; autrement dit, mettez à jour tous les fichiers suivis du répertoire en cours et de ses sous-répertoires.

Cette solution simple fonctionne bien pour moi:

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

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

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

Ensuite, tout ce que vous avez à faire est de lancer:

git rma
git ls-files --deleted -z | xargs -0 git rm --cached

Ceci supprimera tous les fichiers supprimés précédemment suivis par git et traitera le cas où vos noms de fichiers contiennent des espaces.

En fonction de votre variante POSIX, vous devrez peut-être utiliser xargs -0 -r: cela entraînera la fermeture de xargs gracieusement lorsque le contenu null sera redirigé vers une destination.

EDIT: --cached et --deleted sont utilisés conjointement pour éviter toute suppression accidentelle de fichiers qui n'ont pas déjà été supprimés.

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"

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

Je viens de peaufiner la réponse de Virender pour qu'elle en fasse autant:

git ls-files --deleted -z | xargs -t -0 git rm

Aucun des drapeaux de git-add ne mettra en scène les fichiers supprimés; si tout ce que vous avez modifié sont des fichiers supprimés, alors tout va bien, mais sinon, vous devez exécuter git-status et analyser le résultat.

En partant de la réponse de Jeremy, voici ce que j'ai obtenu:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. Obtenir le statut des fichiers.
  2. Pour les fichiers supprimés, isolez le nom du fichier.
  3. Supprimez toutes les lignes commençant par #s, ainsi qu'une ligne d'état contenant le mot " supprimé " en elle Je ne me souviens plus exactement de ce que c'était et ce n'est plus là. Vous devrez peut-être modifier cela pour différentes situations. Je pense que le groupement d'expressions pourrait être une fonctionnalité spécifique à GNU. Par conséquent, si vous n'utilisez pas gnutils, vous devrez peut-être ajouter plusieurs grep -v lignes.
  4. Transmettez les fichiers à git rm.

Coller ceci dans un alias de shell maintenant ...

Comme mentionné

git add -u

organise la suppression des fichiers supprimés, MAIS ÉGALEMENT des fichiers modifiés pour la mise à jour.

Pour supprimer les fichiers modifiés, vous pouvez le faire

git reset HEAD <path>

si vous souhaitez que vos commits soient bien organisés et propres.
REMARQUE: Cela pourrait également décomposer les fichiers supprimés, donc soyez prudent avec ces caractères génériques.

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 d'informations, voir: Scripts Git utiles

git commit -m 'commit msg' $(git ls-files --deleted)

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

J'avais besoin du même et utilisé git gui & "; stade a changé &"; bouton. il ajoute également tout.

Et après " le stade a changé " J'ai fait & Quot; commit & Quot; ...

afin que mon répertoire de travail soit à nouveau propre.

Vous pouvez utiliser git add -u <filenames> uniquement pour créer les fichiers supprimés.

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

.

Le -u est requis pour faire référence à des 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. Si vous spécifiez des fichiers que vous avez supprimés, ils ne les trouveront pas.

quelque chose comme

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

peut le faire.

Ajout d'un alias système pour le stockage intermédiaire des fichiers supprimés en tant que commande rm-all

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

FENÊTRES doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

Remarque

Windows doit avoir bash installé.

(Encore une autre variante)

Je voulais supprimer tous les fichiers déjà supprimés 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
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 d'accès, mais simple à retenir

Pour le projet Visual Studio

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

utile lorsque le chemin du fichier supprimé a de l'espace

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

git cola

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

(Remarque: je fais habituellement tout en ligne de commande dans git, mais git gère les fichiers supprimés un peu gênant).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top