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
?
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
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.
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.
(le commit va tenir compte de la suppression de ce fichier):
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):
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.
de plus, si c'est un dossier à supprimer et que ce sont des dossiers enfants ou des fichiers suivants, utilisez:
git rm -r foldername
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
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:
-
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"
-
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"
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
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.
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
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
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.
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é
-
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
-
d'autre part, de valider les modifications dans le référentiel local.
git commit -m "unwanted files or some inline comments"
-
Enfin, mise à jour/modifications locales dans le dépôt distant.
git push
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:
- déplacer la totalité du local repo ailleurs
- clonez à nouveau le repo de master à votre lecteur local
- copier en arrière les dossiers/dossier de votre copie originale dans #1 en arrière dans le nouveau clone de #2
- assurez-vous que le problème de fichiers volumineux est pas là ou exclus .gitignore file
- normal git add/git commit/git push
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:
- CD sur le repo de dossier (c'est à dire
C:\repos\MyRepo
) - 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
) - 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
- 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
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.
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