J'ai ajouté un fichier nommé "file1.txt"
à un référentiel Git. Après cela, je l'ai validé, j'ai ajouté quelques répertoires appelés dir1
et dir2
et les ai validés dans le référentiel Git.
Maintenant , le dépôt actuel a "file1.txt"
, dir1
et dir2
. Comment puis-je supprimer "file1.txt"
sans affecter les autres, comme dir1
et dir2
?
git rm
est la bonne réponse, mais rappelez-vous que le fichier sera toujours là dans l'historique. Si vous souhaitez supprimer un fichier car il contenait des informations sensibles, vous devrez faire quelque chose de plus radical. (Changer l'historique, en particulier pour le contenu que vous avez déjà poussé, est une action drastique et devrait être évitée si possible.)Réponses:
Utilisez
git rm
.Si vous souhaitez supprimer le fichier du référentiel Git et du système de fichiers , utilisez:
Mais si vous souhaitez supprimer le fichier uniquement du référentiel Git et non le supprimer du système de fichiers, utilisez:
Et pour pousser les modifications au repo à distance
la source
git rm file.txt
supprime le fichier du référentiel mais le supprime également du système de fichiers local .Pour supprimer le fichier du référentiel 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 maintenir le contrôle de version du site Web de mon entreprise, mais le répertoire "mickey" était un dossier tmp pour 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 j'ai téléchargé les fichiers là-bas pour qu'il puisse les récupérer via le navigateur. Oubliant que je l'ai fait, j'ai ensuite effectué un à
git add -A
partir du répertoire de base du site Web. Par la suite, agit status
montré les nouveaux fichiers devant être validés. Maintenant, je devais 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é le
.003
fichier. Heureusement, je me fiche de ce qui est arrivé à la copie locale.003
, mais certains des autres fichiers actuellement modifiés étaient des mises à jour que je viens d'apporter au site Web et il serait épique d'avoir été supprimés sur le système de fichiers local! "Système de fichiers local" = le site Web en direct (ce n'est pas une bonne pratique, mais c'est la réalité) .Mise à jour: Cette réponse obtient un peu de trafic, j'ai donc pensé que je mentionnerais mon autre réponse Git partage quelques bonnes ressources: Cette page a un graphique qui aide à démystifier Git pour moi. Le livre "Pro Git" est en ligne et m'aide beaucoup.
la source
git commit -m "Just removing file1.txt"
, puis, si vous avez un référentiel distant, pousser la validation avec quelque chose commegit push origin master
.Tout d'abord, si vous utilisez
git rm
, en particulier pour plusieurs fichiers, pensez que tout caractère générique sera résolu par le shell, et non par lagit
commande.Mais, si votre fichier est déjà sur GitHub, vous pouvez (depuis juillet 2013) le supprimer directement de l'interface graphique Web!
Ensuite, "
git pull
" sur votre dépôt local, et cela supprimera également le fichier localement.Qu'est-ce qui fait de cette réponse un moyen (détourné) de supprimer un fichier du git repo?
(Sans oublier qu'un fichier sur GitHub est dans un "git repo")
(le commit reflétera la suppression de ce fichier):
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 GitHub):
Voir " Restaurer un fichier supprimé dans un référentiel Git ".
la source
C'est la seule option qui a fonctionné pour moi.
Remarque: remplacez * .sql par votre nom ou type de fichier. Soyez très prudent car cela passera par chaque commit et arrachera ce type de fichier.
EDIT: faites attention - après cette commande, vous ne pourrez ni pousser ni tirer - vous verrez le rejet de «l'historique indépendant», vous pouvez utiliser «git push --force -u origin master» pour pousser ou tirer
la source
git push --force -u origin master
De plus, s'il s'agit d'un dossier à supprimer et qu'il s'agit de dossiers ou de fichiers enfants ultérieurs, utilisez:
la source
Use git rm --cached -r <foldername>
Plus généralement,
git help
aidera avec au moins des questions simples comme celle-ci:la source
git help
confus, mais c'est bon pour les choses simples :)rm
fichier est supprimé plutôt que supprimé de l'index (bien que cela n'a toujours aucun sens pour les noobs).Si vous souhaitez supprimer le fichier du référentiel, mais le laisser dans le système de fichiers (ne sera pas suivi):
Si vous souhaitez supprimer le fichier du référentiel et du système de fichiers, il existe deux options:
Si le fichier ne comporte aucune modification dans l'index:
Si le fichier comporte des modifications dans l'index:
la source
git rm
ne supprimera désormais que le fichier de cette branche, mais il restera dans l'historique 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'historique de la branche 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 reflog, télécommandes, balises et autres.
Si vous voulez l'effacer complètement 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, faites-le
git forget-blob file1.txt
.Cela supprimera toutes les références, fera
git filter-branch
, et exécutera finalement le garbage collector gitgit gc
pour se débarrasser complètement de ce fichier dans votre référentiel.la source
Une autre façon si vous souhaitez supprimer le fichier de votre dossier local à l'aide de la commande rm, puis pousser les modifications sur le serveur distant.
la source
Remarque: si vous souhaitez supprimer le fichier uniquement de git, utilisez ci-dessous:
Si vous souhaitez également supprimer du disque dur:
Si vous souhaitez supprimer un dossier (le dossier peut contenir quelques fichiers), vous devez donc le supprimer à l'aide de la commande récursive, comme ci-dessous:
Si vous souhaitez supprimer un dossier dans un autre dossier
Ensuite, vous pouvez
commit
etpush
comme d'habitude. Cependant, si vous souhaitez récupérer un dossier supprimé, vous pouvez suivre ceci: récupérer des fichiers supprimés de git est possible.En savoir plus sur le doc officiel.
la source
Pour supprimer un fichier spécifique
Pour nettoyer tous les fichiers non suivis d'un répertoire de manière récursive en une seule fois
la source
Si vous avez l'application GitHub pour Windows, vous pouvez supprimer un fichier en 5 étapes faciles:
la source
Dans mon cas, j'ai essayé de supprimer le fichier sur github après quelques validations mais de l'enregistrer sur l'ordinateur
et plus tard, ce fichier a été ignoré
la source
Tout d'abord, supprimez les fichiers du référentiel local.
ou, supprimez les fichiers uniquement du référentiel local mais du système de fichiers
Deuxièmement, validez les modifications dans le référentiel local.
Enfin, mettez à jour / transférez les modifications locales dans le référentiel distant.
la source
J'ai essayé beaucoup des 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) était:
la source
Après avoir supprimé le fichier du référentiel avec,
git rm
vous pouvez utiliser BFG Repo-Cleaner pour effacer complètement et facilement le fichier de l'historique du référentiel.la source
J'ai des fichiers obj et bin qui ont accidentellement fait partie du référentiel que je ne veux pas polluer ma liste de 'fichiers modifiés'
Après avoir remarqué qu'ils étaient allés dans la télécommande, je les ai ignorés en les ajoutant à
.gitignore
Le problème est qu'ils sont déjà dans la télécommande et lorsqu'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:
C:\repos\MyRepo
)C:\repos\MyRepo\SSIS
)git rm -r -f obj
git commit -m "remove obj folder"
J'ai reçu un message alarmant disant que 13 fichiers ont été supprimés 315222 suppressions
Ensuite, parce que je ne voulais pas avoir à rechercher la ligne CMD, je suis allé dans Visual Sstudio et j'ai fait une synchronisation pour l'appliquer à la télécommande
la source
Si vous devez supprimer des fichiers d'une extension déterminée (par exemple, des fichiers compilés), vous pouvez procéder comme suit pour les supprimer tous en même temps:
la source
Selon la documentation .
git rm --cached giant_file
En ce qui concerne les données sensibles, il vaut mieux ne pas dire que vous avez supprimé le fichier, mais plutôt l'inclure dans le dernier commit connu:
0. Modifier le dernier commit
Si vous souhaitez supprimer le fichier de tout l'historique git, selon la documentation, vous devez procéder comme suit:
1. Supprimez-le de votre historique local
3. Si vous devez retirer de la télécommande
4. Si vous devez également le supprimer des versions de balises:
la source
Si vous ne déposez pas dans votre référentiel local mais dans git repo, ouvrez simplement le fichier dans git repo via l'interface Web et trouvez le bouton Supprimer dans le coin droit de l'interface. Cliquez ici, pour afficher l'option de suppression de l'interface
la source