Supprimer temporairement les fichiers de git


450

J'ai installé un git local sur ma machine. Lorsque j'ai initialisé git, j'ai ajouté des bibliothèques et des binaires précompilés. Cependant, maintenant pendant mon développement, je ne veux pas archiver ces fichiers par intermittence. Je ne veux pas supprimer ces fichiers du dépôt. Existe-t-il un moyen de ne pas garder une trace de ces fichiers avant d'avoir terminé mon développement. (Je pense que je ne peux pas utiliser .gitignore car il ne fonctionne que pour les fichiers qui ne sont pas dans git. Je souhaite désactiver temporairement le suivi des fichiers.)



Réponses:


723

git update-index devrait faire ce que vous voulez

Cela indiquera à Git que vous souhaitez commencer à ignorer les modifications apportées au fichier
git update-index --assume-unchanged path/to/file

Quand vous voulez recommencer à suivre
git update-index --no-assume-unchanged path/to/file

Documentation Github: update-index


3
Enfin une commande qui fonctionne réellement pour mon fichier dev-accidentellement commis, merci :)
Richard de Wit

15
Pourquoi ne pas git rm -r --cached <fichier>?
Ehsan

23
@Ehsan, il semble que git rm --cachedcela entraînera la suppression des copies locales sur d'autres machines, où la même branche est extraite, lors de leur prochain tirage. Voir arlocarreon.com/blog/git/… et surtout la discussion en dessous.
mit

3
Ne fonctionne pas pour moi, lorsque j'apporte des modifications au fichier, il est toujours ajouté aux modifications incluses. Je pourrais l'exclure, mais à un moment donné, il sera probablement ajouté accidentellement.
MrFox

8
suppose-inchangé n'était pas destiné à cet effet. Pourrait vouloir lire ce fil
Appy

264

vous pouvez garder vos fichiers sans suivi après

git rm -r --cached <file>

ajoutez vos fichiers avec

git add -u

les pousser ou faire ce que vous voulez.


19
C'est en fait la bonne réponse selon: git-scm.com/book/en/v2/…
Ehsan

git rm --cached .DS_Store puis il s'imprime rm '../.DS_Store'Et le fichier local est supprimé ??! ( git version 2.6.4 (Apple Git-63))
Weishi Zeng


4
Ce n'est pas la bonne réponse car cela supprimera le fichier source. L'OP veut ignorer les modifications locales de ce fichier, ne pas supprimer complètement le suivi
cjsimon

2
AVERTISSEMENT: cela supprimera également les fichiers que vous ne souhaitez pas suivre. La solution consiste à copier tous les fichiers quelque part et à les recopier après la validation.
psad

111
git rm --cached

Cependant, vous ne devriez pas commettre de binaires compilés et de dépendances externes en premier lieu. Utilisez plutôt un outil comme Bundler pour les extraire.


2
N'oubliez pas l'option -r (récursive) pour les répertoires: git rm -r --cached
Anatoliy Shuba

36

Utilisez la commande suivante pour décompresser les fichiers

git rm --cached <file path>

7

Le git-book le mentionne dans la section 2.4: "Annuler les choses". Fondamentalement, ce que vous devez faire est de réinitialiser l'état de l'index de certains fichiers à l'état HEAD, c'est-à-dire à l'état de la dernière extraction (ou validation). Cela annule le transfert du fichier vers l'index en cours. La commande pour cette tâche est git reset. [1]

Ainsi, la commande que vous devez exécuter est:

git reset HEAD /path/to/file

Les nouvelles versions de git (je crois depuis 1.6 ou plus) donnent cette commande (et bien d'autres) comme astuce lors de l'exécution git status. Ces versions sont très conviviales. Un conseil personnel: si vous ne disposez que de quelques fichiers, utilisez git add -i. Cela lancera l'outil de mise en scène interactive, ce qui rend la chose particulièrement facile. Aussi, je recommande fortement de lire le livre, car il est très explicite sur l'utilisation de git dans des situations pratiques.

[1] http://www.git-scm.com/book


Je suis d'accord pour dire que git reset [file]c'est la façon la plus simple de supprimer des fichiers.
Spectral

18
défaire et défaire sont des choses différentes
Jaime Sangcap

6

Pas une réponse à la question d'origine. Mais cela pourrait aider quelqu'un.

Pour voir les modifications que vous avez apportées ( sachez quels fichiers sont marqués comme --assume-inchanged )

git ls-files -v

La liste résultante des fichiers aura un préfixe avec un caractère (ex: H ou h) Si c'est un minuscule (c'est-à-dire h) alors le fichier a été marqué --assume-inchanged


5

Je suppose que vous demandez comment supprimer TOUS les fichiers du dossier de construction ou du dossier bin, plutôt que de sélectionner chaque fichier séparément.

Vous pouvez utiliser cette commande:

git rm -r -f /build\*

Assurez-vous que vous êtes dans le répertoire parent du répertoire de génération.
Cette commande "supprimera" récursivement tous les fichiers qui se trouvent dans les dossiers bin / ou build /. Par le mot supprimer, je veux dire que git prétendra que ces fichiers sont "supprimés" et que ces fichiers ne seront pas suivis. Le git marque vraiment ces fichiers comme étant en mode suppression.

Assurez-vous que votre .gitignore est prêt pour les commits à venir.
Documentation: git rm


1

git reset [fichier]

Récupérer le fichier de la zone de transit vers le répertoire de travail

J'oublie souvent d'ajouter mes modules de nœuds au fichier .gitignore, cela résout ce problème.


1

Cela a fonctionné pour moi

git reset HEAD 'filename'


1

Pour supprimer tous les fichiers Untrack. Essayez cette commande de terminal

 git clean -fdx

Il supprimera les fichiers du disque et non de l'historique git.
Leonardo

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.