Question Comment puis-je supprimer un fichier de Git Repo?


J'ai ajouté un fichier nommé "file1.txt" git repo. Après que je l'ai commis, ajouté quelques répertoires appelés dir1 et dir2, et les a engagés à git repo.

Maintenant, le repo actuel a "file1.txt", dir1 et dir2.
Comment puis-je supprimer "file1.txt" sans affecter les autres comme dir1 et dir2?


1311
2018-01-12 07:48


origine


Réponses:


Utilisation git rm:

git rm file1.txt
git commit -m "remove file1.txt"

Mais si vous voulez supprimer le fichier seulement du dépôt Git et ne pas le retirer du système de fichiers, utilisez:

git rm --cached file1.txt
git commit -m "remove file1.txt"

Et pour pousser les changements à repo à distance

git push origin branch_name  

2213
2018-01-12 07:52



git rm file.txt supprime le fichier du repo mais le supprime également du système de fichiers local.

Pour supprimer le fichier du repo et ne pas supprimez-le de l'utilisation du système de fichiers local:
git rm --cached file.txt 

La situation exacte ci-dessous est où j'utilise git pour maintenir le contrôle de version pour le site Web de mon entreprise, mais le répertoire "mickey" était un dossier tmp pour partager du contenu privé avec un développeur de CAO. Quand il avait besoin de fichiers énormes, j'ai fait un répertoire privé, non lié et ftpd les fichiers là pour qu'il puisse aller chercher via le navigateur. Oubliant je l'ai fait, j'ai plus tard effectué un git add -A à partir du répertoire de base du site Web. Par la suite, git status a montré les nouveaux fichiers à commettre. Maintenant j'avais besoin de les supprimer du suivi et du contrôle de version de git ...

L'exemple de sortie ci-dessous provient de ce qui m'est arrivé, où j'ai involontairement supprimé .003 fichier. Heureusement, je me fiche de ce qui est arrivé à la copie locale .003, mais certains des autres fichiers actuellement modifiés sont des mises à jour que je viens de faire sur le site et qui seraient épiques à avoir été supprimées sur le système de fichiers local! "Système de fichiers local" = le site Web en direct (pas une grande pratique, mais c'est la réalité).

[~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003
error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications
(use --cached to keep the file, or -f to force removal)
[~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003
rm 'shop/mickey/mtt_flange_SCN.7z.003'
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
#   modified:   shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002
rm 'shop/mickey/mtt_flange_SCN.7z.002'
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001  shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ 
[~/www]$ 
[~/www]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    shop/mickey/mtt_flange_SCN.7z.002
#   deleted:    shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
#   modified:   shop/mickey/mtt_flange_SCN.7z.001
[~/www]$

Mettre à jour: Cette réponse obtient un peu de trafic, alors j'ai pensé que je mentionnerais mon autre réponse Git partage quelques excellentes ressources: Cette page a un graphique qui aide à démystifier Git pour moi. le Le livre "Pro Git" est en ligne et m'aide beaucoup.


547
2018-05-25 20:26



Si votre fichier est déjà sur GitHub, vous maintenant (Juillet 2013) peut supprimez-le directement de l'interface graphique Web!

Visualisez simplement n'importe quel fichier dans votre référentiel, cliquez sur l'icône de la corbeille en haut et validez la suppression comme toute autre modification Web.

delete button

(le commit reflètera la suppression de ce fichier):

commit a deletion

Et juste comme ça, c'est parti.

Pour obtenir de l'aide sur ces fonctions, assurez-vous de lire nos articles d'aide sur créer, en mouvement, renommer, et suppression des dossiers.

Note: Puisque c'est un système de contrôle de version, Git a toujours votre dos si vous avez besoin de récupérer le fichier plus tard.

La dernière phrase signifie que le fichier supprimé fait toujours partie de l'historique, et vous pouvez le restaurer assez facilement (mais pas encore via l'interface web de GitHub):

Voir "Restaurer un fichier supprimé dans un repo Git".


56
2017-07-04 20:53



C'est la seule option qui a fonctionné pour moi.

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'

Remarque: Remplacez * .sql par votre nom de fichier ou votre type de fichier. Soyez très prudent car cela va passer par chaque commit et ripper ce type de fichier.


39
2018-02-27 19:29



Plus généralement, git help aidera avec au moins des questions simples comme ceci:

zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
   add        Add file contents to the index
   :
   rm         Remove files from the working tree and from the index

23
2018-01-12 08:21



En outre, si c'est un dossier à supprimer et ses dossiers ou fichiers enfants suivants, utilisez:

git rm -r foldername

23
2018-04-17 15:41



Si vous voulez supprimer le fichier du repo, mais laissez-le dans le système de fichiers (ne sera pas suivi):

bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"

Si vous voulez supprimer le fichier du dépôt et du système de fichiers, il y a deux options:

  1. Si le fichier n'a aucune modification mise en scène dans l'index:

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. Si le fichier comporte des modifications dans l'index:

    bykov@gitserver:~/temp> git rm -f file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    

10
2018-03-20 12:13



git rm ne supprimera le fichier sur cette branche qu'à partir de maintenant, mais il reste dans l'histoire et git s'en souviendra.

La bonne façon de le faire est avec git filter-branch, comme d'autres l'ont mentionné ici. Il va réécrire chaque commit dans l'histoire de la branche pour supprimer ce fichier.

Mais, même après avoir fait cela, git peut s'en souvenir car il peut y avoir des références dans le reflet, les télécommandes, les tags et autres.

Si vous voulez l'effacer complètement en une étape, je vous recommande d'utiliser git forget-blob

https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/

C'est facile, fais juste git forget-blob file1.txt.

Cela va supprimer toutes les références, faire git filter-branch, et enfin lancer le garbage garbage collector git gc pour se débarrasser complètement de ce fichier dans votre repo.


10
2018-01-23 12:56