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

agent.smith
la source

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

Andy
la source
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.

cajuuh
la source
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
Vous avez la réponse ici stackoverflow.com/questions/6919121/…
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.

Tekkub
la source
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>
Dinesh Vaitage
la source
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

Eric Spreen
la source
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

premier
la source
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

Vraj Pandya
la source
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.

lordharbar
la source
1

Cela a fonctionné pour moi

git reset HEAD 'filename'

Vivek
la source
1

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

 git clean -fdx
divya d
la source
Il supprimera les fichiers du disque et non de l'historique git.
Leonardo
-1

pour supprimer les fichiers et dossiers non suivis, définissez git clean -fdx

Khadraoui Khairi
la source