Comment puis-je supprimer un fichier de Git repo?

j'ai ajouté un fichier nommé "file1.txt" repo git. Après cela je l'ai engagé, j'ai ajouté quelques répertoires appelés dir1 et dir2 , et je les ai engagés dans Git repo.

maintenant la pension actuelle a "file1.txt" , dir1 et dir2 .

Comment puis-je supprimer "file1.txt" sans affecter d'autres comme dir1 et dir2 ?

1381
demandé sur CodeWizard 2010-01-12 10:48:52

17 réponses

Utilisation git rm :

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

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

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

et de pousser les changements à distance repo

git push origin branch_name  
2320
répondu Greg Hewgill 2017-10-27 09:30:41

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

pour supprimer le fichier de la pension et et non le supprimer 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 à partager contenu privé avec un développeur CAO. Quand il avait besoin D'énormes fichiers, j'ai créé un répertoire privé, non lié et ftpd les fichiers pour qu'il puisse les récupérer via le navigateur. Oubliant ce que j'ai fait, j'ai réalisé plus tard un git add -A à partir du répertoire de base du site. Par la suite, git status a montré les nouveaux fichiers à propager. Maintenant j'avais besoin de les supprimer du tracking et du contrôle de version de git...

exemple de sortie ci-dessous est de ce qui vient de m'arriver, où je involontairement suppression du fichier .003 . Heureusement, Je ne me soucie pas de ce qui est arrivé à la copie locale à .003 , mais certains des autres fichiers actuellement modifiés étaient des mises à jour que je viens de faire sur le site web et serait ÉPIQUE d'avoir été supprimé sur le système de fichiers local! "Système de fichiers Local" = le site " live (pas très pratique, mais qui 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]$

mise à Jour: Cette réponse est d'obtenir un peu de trafic, donc je pensais que je mentionnez mon autre réponse de Git partage quelques grandes ressources: cette page a un graphique qui aide à démystifier Git pour moi. Le " Pro Git "livre est en ligne et m'aide beaucoup.

553
répondu Chris K 2017-05-23 12:02:49

si votre fichier est déjà sur GitHub, vous maintenant (juillet 2013) peut supprimer directement de L'interface graphique web!

visualisez simplement n'importe quel fichier dans votre dépôt, cliquez sur l'icône de la corbeille en haut, et propagez la suppression comme n'importe quelle autre édition basée sur le web.

delete button

(le commit va tenir compte de la suppression de ce fichier):

commit a deletion

et comme ça, c'est parti.

pour obtenir de l'aide avec ces caractéristiques, assurez-vous de lire nos articles d'aide sur création , déplacement , renommage , et suppression fichiers.

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'histoire, et vous pouvez le restaurer assez facilement (mais pas encore par l'intermédiaire de L'interface web GitHub):

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

60
répondu VonC 2017-05-23 11:47:32

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

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

Note: Remplacer *.sql avec votre nom de fichier ou votre type de fichier. Soyez très prudent car cela passera par chaque commit et déchirer ce type de fichier.

42
répondu Jason Glisson 2015-02-27 19:39:16

de plus, si c'est un dossier à supprimer et que ce sont des dossiers enfants ou des fichiers suivants, utilisez:

git rm -r foldername
26
répondu Raja 2016-04-28 13:12:31

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
répondu James Polley 2010-01-12 08:21:03

si vous voulez supprimer le fichier de la pension, mais le laisser 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 de la pension et du système de fichiers alors il ya deux options:

  1. si le fichier n'a pas de changements échelonnés dans l'index:

    bykov@gitserver:~/temp> git rm file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
  2. Si le fichier a des changements sur la scène de l'index:

    bykov@gitserver:~/temp> git rm -f file1.txt
    bykov@gitserver:~/temp> git commit -m "remove file1.txt"
    
12
répondu Aleksey Bykov 2015-03-20 12:31:35

git rm ne supprimera le fichier sur cette branche, à 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 réécrira 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 parce qu'il peut y avoir des références à lui dans reflog, remotes, tags et autres.

si vous souhaitez effacer en une seule é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, il suffit de faire git forget-blob file1.txt .

cela va supprimer toutes les références, faire git filter-branch , et enfin exécuter le collecteur d'ordures git git gc pour se débarrasser complètement de ce fichier dans votre repo.

11
répondu nachoparker 2017-01-23 12:56:04

une autre façon si vous voulez supprimer le fichier de votre dossier local en utilisant la commande rm et puis pousser les modifications sur le serveur distant.

rm file1.txt

git commit -a -m "Deleting files"

git push origin master
8
répondu Suhaib 2015-10-06 03:07:44

pour supprimer un fichier spécifique

git rm fichier

pour nettoyer tous les fichiers non tracés d'un répertoire de façon récursive en un seul tir

git nettoyage fdx

6
répondu Sitesh 2016-08-23 13:56:08

si vous avez L'application Github for Windows, vous pouvez supprimer un fichier en 5 étapes faciles:

  • Cliquez Sur Le Bouton Sync.
  • cliquez sur le répertoire où se trouve le fichier et sélectionnez votre dernière version du fichier.
  • Cliquez sur outils et sélectionnez "Ouvrir un shell ici."
  • dans l'interpréteur de commandes, tapez:" rm {nom du fichier} " et appuyez sur Entrée.
  • valider la modification et de resynchronisation.
5
répondu jushusted 2013-03-15 18:52:55

dans mon cas, j'ai essayé de supprimer le fichier sur github après quelques commits mais enregistrer sur l'ordinateur

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD
git push --force -u origin master

et plus tard ce fichier a été ignoré

5
répondu OlegV 2016-08-23 12:03:21
  1. tout d'abord,supprimer les fichiers du dépôt local.

    git rm-r Nom de Fichier

    ou, supprimer uniquement les fichiers du dépôt local, mais à partir du système de fichiers

    git rm --Cache File-Name

  2. d'autre part, de valider les modifications dans le référentiel local.

    git commit -m "unwanted files or some inline comments"   
    
  3. Enfin, mise à jour/modifications locales dans le dépôt distant.

    git push 
    
2
répondu Ajay 2016-10-18 04:00:50

j'ai essayé beaucoup des options suggérées et aucune ne semblait fonctionner (Je ne vais pas énumérer les divers problèmes). Ce que j'ai fini par faire, qui a fonctionné, était simple et intuitif (pour moi) était:

  1. déplacer la totalité du local repo ailleurs
  2. clonez à nouveau le repo de master à votre lecteur local
  3. copier en arrière les dossiers/dossier de votre copie originale dans #1 en arrière dans le nouveau clone de #2
  4. assurez-vous que le problème de fichiers volumineux est pas là ou exclus .gitignore file
  5. normal git add/git commit/git push
2
répondu jacanterbury 2018-03-21 18:22:23

j'ai des fichiers obj et bin qui l'ont accidentellement fait dans le repo que je ne veux pas polluer ma liste de 'fichiers modifiés '

après j'ai remarqué qu'ils sont allés à la télécommande, je les ai ignorés en ajoutant ceci à .gitignore

/*/obj
/*/bin

le problème est qu'ils sont déjà dans la télécommande, et quand ils sont changés, ils apparaissent comme changés et polluent la liste des fichiers changés.

pour arrêter de les voir, vous besoin de supprimer tout le dossier du dépôt distant.

dans un invite de commande:

  1. CD sur le repo de dossier (c'est à dire C:\repos\MyRepo )
  2. je veux supprimer SSIS\obj. Il semble que vous ne pouvez supprimer au niveau supérieur, donc vous devez maintenant CD dans SSIS: (i.e. C:\repos\MyRepo\SSIS )
  3. tapez maintenant l'incantation magique git rm -r -f obj
    • rm=remove
    • - r = supprimer récursivement
    • -f = force, à cause de vous vraiment
    • obj est le dossier
  4. Maintenant exécuter git commit -m "remove obj folder"

j'ai reçu un message alarmant disant 13 fichiers ont changé 315222 suppressions

alors parce que je ne voulais pas avoir à chercher la ligne CMD, je suis entré dans Visual Sstudio et J'ai fait une synchronisation pour l'appliquer à la à distance

0
répondu Nick.McDermaid 2018-07-28 10:07:25

après avoir supprimé le fichier de la pension avec git rm vous pouvez utiliser BFG Repo-Cleaner pour effacer complètement et facilement le fichier de l'historique de la pension.

0
répondu glisu 2018-09-30 17:26:37

Incase si vous ne déposez pas dans votre repo local mais dans Git repo, puis il suffit d'ouvrir le fichier dans Git repo par l'intermédiaire de l'interface web et de trouver le bouton Supprimer au coin droit dans l'interface. Cliquez ici, pour voir l'interface Supprimer L'Option

-6
répondu Poseidon 2016-11-30 15:47:09