Dans un dépôt Git, j'ai supprimé quatre fichiers en utilisant 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 manuellement et ajouter chaque fichier comme ceci:
git rm file1 file2 file3 file4
Idéalement, je recherche quelque chose qui fonctionne de la même manière que git add .
, si cela est possible.
$ git add -u
Cela indique à git de placer automatiquement les fichiers suivis, y compris la suppression des fichiers déjà suivis.
Pour mettre en scène tout votre arbre de travail:
$ git add -u :/
Pour ne mettre en scène que le chemin actuel:
$ git add -u .
git ls-files --deleted -z | xargs -0 git rm
pourrait être ce que vous cherchez .. ça marche pour moi ..
Vous pouvez utiliser
git add -u
Pour ajouter les fichiers supprimés à la zone de transfert, puis les valider
git commit -m "Deleted files manually"
Si vous courez simplement:
git add -u
git mettra à jour son index pour savoir que les fichiers que vous avez supprimés doivent 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 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
ceci est similaire à 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 déplacement soit automatique).
Pour mettre en scène uniquement les fichiers supprimés:
for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done
Ou (à la manière de 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 aisée.
git rm test.txt
Avant ou après avoir supprimé le fichier actuel.
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. Je dispose d’un alias bash pour pouvoir 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 qui ont été supprimés du système de fichiers sont ajoutés à l'index comme étant supprimés.
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 il 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
commettre tous les changements. Cela inclura les fichiers supprimés.
git ls-files --deleted | xargs git rm
est 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.
git add -u
-u -- update 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 "."; En d'autres termes, mettez à jour tous les fichiers suivis du répertoire actuel 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
Cela supprimera tous les fichiers supprimés précédemment suivis par git, ainsi que les cas où vos noms de fichiers contiennent des espaces.
En fonction de votre variante POSIX, vous devrez peut-être utiliser xargs -0 -r
: ceci entraînera la fermeture de xargs
lorsque le contenu null sera redirigé.
EDIT: Les drapeaux --cached
et --deleted
sont utilisés en tandem pour éviter toute suppression accidentelle de fichiers qui n'ont pas encore été supprimés.
Veuillez utiliser -t
pour voir quelle commande est en cours d'exécution
J'ai juste modifié la réponse de Virender pour qu'elle en fasse de même:
git ls-files --deleted -z | xargs -t -0 git rm
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"
Comme mentionné
git add -u
organise les fichiers supprimés pour la suppression, MAIS AUSSI modifié les fichiers pour la mise à jour.
Pour décomposer les fichiers modifiés, vous pouvez le faire
git reset HEAD <path>
si vous aimez garder vos commits organisés et propres.
NOTE: Cela pourrait aussi désagréger les fichiers supprimés, donc soyez prudent avec ces caractères génériques.
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 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
grep -v
.git rm
.Coller ceci dans un alias de Shell maintenant ...
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: 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 de la même chose .__ et j'ai utilisé le bouton "étape changée" de git gui . Il ajoute aussi tout.
Et après "stage changé" j'ai fait "commit" ...
donc mon répertoire de travail est à nouveau propre.
Vous pouvez utiliser git add -u <filenames>
pour créer les fichiers supprimés uniquement.
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 aux fichiers qui existent dans le référentiel mais qui n'existent plus dans le répertoire de travail. Sinon, la valeur par défaut de git add
consiste à rechercher les fichiers du répertoire de travail. Si vous spécifiez des fichiers que vous avez supprimés, ils ne seront pas trouvés.
quelque chose comme
git status | sed -s "s/^.*deleted: //" | xargs git rm
peut le faire.
(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
Ajout d'un alias système pour stocker les 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)"
Remarque
Windows doit avoir bash
installé.
Pour projet de studio visuel
'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm'
ce qui est utile lorsque le chemin du fichier supprimé a de l'espace
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 simple à retenir