J'ai supprimé des fichiers et le statut de git est présenté ci-dessous.
J'ai commis et poussé.
GitHub affiche toujours les fichiers supprimés dans le référentiel. Comment puis-je supprimer des fichiers dans le référentiel GitHub?
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: modules/welcome/language/english/kaimonokago_lang.php
# deleted: modules/welcome/language/french/kaimonokago_lang.php
# deleted: modules/welcome/language/german/kaimonokago_lang.php
# deleted: modules/welcome/language/norwegian/kaimonokago_lang.php
Si j'utilise git rm
, cela donne ce qui suit.
usage: git rm [options] [--] <file>...
-n, --dry-run dry run
-q, --quiet do not list removed files
--cached only remove from the index
-f, --force override the up-to-date check
-r allow recursive removal
--ignore-unmatch exit with a zero status even if nothing matched
git add -u
met à jour toutes vos modifications
Soyez très prudent avec git rm .
; cela pourrait supprimer plus que vous ne le souhaitez. Bien sûr, vous pouvez récupérer, mais il est plus simple de ne pas avoir à le faire.
Le plus simple serait:
git rm modules/welcome/language/english/kaimonokago_lang.php \
modules/welcome/language/french/kaimonokago_lang.php \
modules/welcome/language/german/kaimonokago_lang.php \
modules/welcome/language/norwegian/kaimonokago_lang.php
Vous ne pouvez pas utiliser de caractères génériques Shell car les fichiers n'existent pas, mais vous pouvez utiliser (du moins dans Bash):
git rm modules/welcome/language/{english,french,german,norwegian}/kaimonokago_lang.php
Ou considérez:
git status | sed -n '/^# *deleted:/s///p' | xargs git rm
Ceci prend la sortie de git status
, n'imprime rien par défaut (sed -n
), mais sur les lignes qui commencent # deleted:
, il supprime le #
et le deleted:
et imprime ce qui reste; xargs
rassemble les arguments et les fournit à une commande git rm
. Cela fonctionne pour un nombre quelconque de fichiers, quelle que soit la similarité (ou la différence) des noms.
Une autre version de ByScripts répond
git rm $(git ls-files --deleted)
Cela supprimera UNIQUEMENT les fichiers supprimés du git.
Il pourrait également être utilisé pour ajouter UNIQUEMENT des fichiers modifiés.
git add $(git ls-files --modified)
Ces commandes fonctionnent également sur gitbash pour Windows.
Mettez à jour toutes les modifications que vous avez apportées:
git add -u
Les fichiers supprimés doivent passer d'un fichier non mis en scène (généralement de couleur rouge) à un fichier mis en scène (vert). Puis engagez-vous à supprimer les fichiers supprimés:
git commit -m "note"
La meilleure solution si vous ne vous souciez pas de la sauvegarde des fichiers modifiés consiste à utiliser git add -u
comme indiqué par mshameers et/ou pb2q.
Si vous voulez seulement supprimer les fichiers supprimés, mais pas les fichiers modifiés, je pense que vous devriez utiliser l'argument ls-files
avec l'option --deleted
(inutile d'utiliser regex ou d'autres arguments/options complexes):
git ls-files --deleted | xargs git rm
Oui, git rm <filename>
organisera l'état de suppression d'un fichier, où <filename>
pourrait être un motif global:
$ git rm modules/welcome/language/*/kaimonokago_lang.php
rm modules/welcome/language/english/kaimonokago_lang.php
rm modules/welcome/language/french/kaimonokago_lang.php
rm modules/welcome/language/german/kaimonokago_lang.php
rm modules/welcome/language/norwegian/kaimonokago_lang.php
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: modules/welcome/language/english/kaimonokago_lang.php
# ...
Ensuite, vous pouvez vous engager.
git commit -a
le fera en une fois, si vous voulez.
Vous pouvez également utiliser git add -u
pour appliquer toutes les modifications, y compris tous les fichiers supprimés, puis valider.
Quand j'ai beaucoup de fichiers que j'ai supprimés et qui n'ont pas été mis en attente pour la validation, vous pouvez git rm
les tous en une seule émission avec:
for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done
Comme le répondeur l'a mentionné, soyez prudent avec git rm
.
Essaye ça:
git rm `git ls-files -d`
Vous pouvez créer un script shell qui supprimera tous vos fichiers lors de l'exécution:
git status | grep deleted | awk '{print "git rm " $3;}' > ../remove.sh
Le script créé est remove.sh
et contient la liste complète des commandes git rm
.
Vous pouvez utiliser
git commit -m "remove files" -a
git Push
Après avoir supprimé les fichiers manuellement.
Si vous voulez tous les supprimer en utilisant "git rm". C'est ce que je fais:
git ls-files --deleted -z | xargs -0 git rm
Cette requête répertorie tous les fichiers supprimés et les supprime de votre référentiel git. J'espère que ça aide.
git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf
git add -u .
git add --update .
La fonction de nettoyage intégrée peut également être utile ...
git clean -fd
J'ai eu cette question de fichiers fantômes apparaissant dans mon dépôt après que je les ai supprimés et suis tombé sur cette commande soignée!
git add -A
C'est essentiellement la même chose que git add -a
et git add -u
combinés, mais c'est sensible à la casse. Je l'ai eu de ce lien génial (ce lien pointe maintenant vers la version sur archive.org, car l'original a été converti en page spam/hameçonnage en juin 2016)
Voici comment détecter les fichiers supprimés et organiser leur suppression dans le cadre du prochain commit. Toutes les solutions sur ce fil ont des mérites différents. Cette solution ci-dessous traite spécifiquement du problème des noms de fichiers contenant des espaces.
git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm '{}'
assurez-vous de le tester avec l'option --dry-run de git avant de l'exécuter avec les éléments suivants:
git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm --dry-run '{}'
explication:
git status --porcelain
Ceci affiche quelque chose comme D "/ chemin vers un dossier/chemin vers un fichier" qui ne se produit que lorsqu'il y a des espaces dans les noms de chemin
awk '/^.D .*$/ {print $0}'
ne correspond qu'aux lignes commençant par "D"
sed 's/ D \(.*\)/\1/'
enlever "D" de l'avant de chaque chaîne
tr -d '"'
supprimer les guillemets, le cas échéant
xargs -I {} git rm '{}'
définissez les variables de nom de fichier comme {} exécutez nom de fichier sous git rm entre guillemets simples afin de vous assurer qu'il prend en charge les noms de fichier avec des espaces.