Comment puis-je supprimer un fichier de git repo?

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

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

Utilisez git rm :

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

Mais si vous souhaitez supprimer le fichier uniquement du référentiel Git et ne pas le supprimer 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 

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

Pour supprimer le fichier du repository et ne pas le supprimer du système de fichiers local, utilisez:
git rm --cached file.txt

La situation exacte ci-dessous est celle où j’utilise git pour gérer le contrôle de version du site Web de mon entreprise, mais le répertoire “mickey” était un dossier tmp permettant de partager du contenu privé avec un développeur CAO. Quand il avait besoin de fichiers énormes, j’ai créé un répertoire privé, non lié, et y ai transféré les fichiers par FTP. En oubliant que je l’ai fait, j’ai ensuite effectué un git add -A dans le répertoire de base du site Web. Par la suite, le git status indiquait les nouveaux fichiers nécessitant une validation. Maintenant, je devais les supprimer du suivi de git et du contrôle de version …

L’exemple de sortie ci-dessous provient de ce qui vient de m’arriver, où j’ai involontairement supprimé le 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 venais de créer sur le site Web et seraient épiques d’avoir été supprimés sur le système de fichiers local! “Système de fichiers local” = le site Web en direct (pas une excellente pratique, mais une 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 ..." to unstage) # # deleted: shop/mickey/mtt_flange_SCN.7z.003 # # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." 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 ..." 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 génère du trafic, alors je pensais mentionner mon autre réponse Git qui partage quelques excellentes ressources: Cette page contient un graphique qui aide à démystifier Git pour moi. Le livre «Pro Git» est en ligne et m’aide beaucoup.

Si votre fichier est déjà sur GitHub, vous (juillet 2013) pouvez le supprimer directement de l’interface graphique Web!

Affichez 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.

bouton supprimer

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

commettre une suppression

Et juste comme ça, c’est parti.

Pour obtenir de l’aide sur ces fonctionnalités, lisez attentivement nos articles d’aide sur la création , le déplacement , le changement de nom et la suppression de fichiers.

Remarque: Comme il s’agit d’un système de contrôle de version, Git a toujours le dos si vous devez récupérer le fichier ultérieurement.

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

Voir ” Restaurer un fichier supprimé dans un repository Git “.

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 passera par chaque validation et extraira ce type de fichier.

En outre, s’il s’agit d’un dossier à supprimer et de ses dossiers ou fichiers enfants ultérieurs, utilisez:

 git rm -r foldername 

Plus généralement, git help aidera à répondre à des questions simples comme celles-ci:

 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 

Si vous souhaitez supprimer le fichier du référentiel, 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 souhaitez supprimer le fichier du repository et du système de fichiers, deux options s’offrent à vous:

  1. Si le fichier ne comporte aucune modification dans l’index:

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

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

git rm n’enlèvera le fichier sur cette twig qu’à partir de maintenant, mais il rest dans l’historique et git s’en souviendra.

La bonne façon de faire est d’utiliser git filter-branch , comme d’autres l’ont mentionné ici. Il réécrira chaque commit dans l’historique de la twig pour supprimer ce fichier.

Mais, même après cela, Git peut s’en souvenir, car il peut y avoir des références dans le refog, les télécommandes, les tags, etc.

Si vous voulez l’effacer complètement en une seule fois, je vous recommande d’utiliser git forget-blob

https://ownyourbits.com/2017/01/18/completement-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 lancer git garbage collector git gc pour se débarrasser complètement de ce fichier dans votre repo.

Vous pouvez également supprimer le fichier de votre dossier local à l’aide de la commande rm, puis transférer les modifications sur le serveur distant.

 rm file1.txt git commit -a -m "Deleting files" git push origin master 

Si vous avez l’application GitHub pour Windows, vous pouvez supprimer un fichier en 5 étapes faciles:

  • Cliquez sur Sync.
  • Cliquez sur le répertoire où se trouve le fichier et sélectionnez la dernière version du fichier.
  • Cliquez sur les outils et sélectionnez “Ouvrir un shell ici”.
  • Dans le shell, tapez: “rm {filename}” et appuyez sur Entrée.
  • Engagez le changement et resynchronisez.

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é

Pour supprimer un fichier spécifique

git rm filename

Pour nettoyer tous les fichiers non répertoriés d’un répertoire de manière récursive en une seule fois

git clean -fdx

  1. Tout d’abord, supprimez les fichiers du référentiel local.

    git rm -r Nom du fichier

    ou, supprimer des fichiers uniquement du référentiel local mais du système de fichiers

    git rm –cached Nom du fichier

  2. Deuxièmement, validez les modifications dans le référentiel local.

     git commit -m "unwanted files or some inline comments" 
  3. Enfin, mettez à jour / insérez les modifications locales dans le référentiel distant.

     git push 

J’ai essayé beaucoup d’options suggérées et aucune ne semblait fonctionner (je n’énumérerai pas les différents problèmes). Ce que j’ai fini par faire, qui a fonctionné, était simple et intuitif (pour moi):

  1. déplacer le repo local entier ailleurs
  2. cloner le repo de nouveau de maître à votre lecteur local
  3. Recopiez les fichiers / dossiers de votre copie originale n ° 1 dans le nouveau clone de # 2
  4. assurez-vous que le fichier volumineux n’est pas là ou exclu dans le fichier .gitignore
  5. faire le git add / git commit / git push habituel

J’ai des fichiers obj et bin qui sont accidentellement entrés dans le repository que je ne veux pas polluer la liste des fichiers modifiés

Après avoir 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 modifiés, ils apparaissent comme modifiés et polluent la liste des fichiers modifiés.

Pour ne plus les voir, vous devez supprimer l’intégralité du dossier du référentiel distant.

Dans une invite de commande:

  1. CD dans le dossier repo (c.-à-d. C:\repos\MyRepo )
  2. Je veux supprimer SSIS \ obj. Il semble que vous ne pouvez supprimer que dans le niveau supérieur, vous devez maintenant CD dans SSIS: (par exemple, C:\repos\MyRepo\SSIS )
  3. Tapez maintenant l’incantation magique git rm -r -f obj
    • rm = supprimer
    • -r = supprimer récursivement
    • -f = signifie force, parce que tu le penses vraiment
    • obj est le dossier
  4. Maintenant, lancez git commit -m "remove obj folder"

J’ai reçu un message alarmant disant que 13 fichiers avaient été supprimés 315222

Puis, parce que je ne voulais pas avoir à rechercher la ligne CMD, je suis allé dans Visual Sstudio et j’ai effectué une synchronisation pour l’appliquer à la télécommande.

Si vous ne déposez pas votre repo local, mais dans git repo, ouvrez simplement le fichier git repo via l’interface Web et trouvez le bouton Delete dans le coin droit de l’interface. Cliquez ici pour afficher l’interface Supprimer l’option