Voulez-vous dire "réinitialiser ce qui était là avant" ou "supprimer, parce que je ne veux plus de ce fichier"?
Andrew Aylett
Dans mon cas c'est pareil car le fichier n'existait pas avant ...
hcs42
Réponses:
505
Tu veux:
git rm --cached [file]
Si vous omettez cette --cachedoption, elle sera également supprimée de l'arborescence de travail. git rmest légèrement plus sûr que git reset, car vous serez averti si le contenu mis en scène ne correspond pas à la pointe de la branche ou au fichier sur le disque. (Si ce n'est pas le cas, vous devez ajouter --force.)
Cela fonctionne également très bien si, par exemple, vous avez accidentellement archivé certains intermédiaires de construction ou des fichiers de configuration locaux qui ne sont pas entrés dans votre .gitignore; utiliser git rm --cachedpour les supprimer du référentiel, ajouter les fichiers ou répertoires pertinents à .gitignore, mettre en scène et valider normalement. Ils disparaîtront du dépôt mais resteront intacts dans votre arbre local, et vous ne les archiverez plus accidentellement.
Ionoclast Brigham
22
Cela supprime également le fichier du dépôt (distant) après avoir validé et poussé.
powder366
6
Cela ne le supprime pas de l'index, mais le marque comme supprimé dans l'index.
JotaBe
4
Cette réponse est probablement fausse car elle supprime un fichier du dépôt (comme @ powder366 déjà mentionné) qui n'est pas le résultat souhaité.
otomo
1
Cette solution n'a pas fonctionné pour moi. Il a marqué le fichier spécifié comme supprimé, puis le supprime du référentiel local.
paiego
134
Cela devrait supprimer un <fichier> pour vous (sans supprimer ou autrement modifier le fichier):
Selon votre flux de travail, cela peut être le genre de chose dont vous avez rarement besoin pour qu'il soit inutile d'essayer de trouver une solution en ligne de commande (à moins que vous ne travailliez sans interface graphique pour une raison quelconque).
Utilisez simplement l'un des outils basés sur l'interface graphique qui prennent en charge la gestion des index, par exemple:
git gui <- utilise le cadre de fenêtrage Tk - style similaire à gitk
git cola <- une interface graphique de style plus moderne
Ceux-ci vous permettent de déplacer des fichiers dans et hors de l'index par pointer-cliquer. Ils prennent même en charge la sélection et le déplacement de parties d'un fichier (modifications individuelles) vers et depuis l'index.
Que diriez-vous d'une perspective différente: si vous vous trompez en utilisant l'une des commandes suggérées, plutôt cryptiques:
git rm --cached [file]
git reset HEAD <file>
... vous avez une réelle chance de perdre des données - ou du moins de les rendre difficiles à trouver. À moins que vous n'ayez vraiment besoin de le faire à très haute fréquence, l' utilisation d'un outil GUI est susceptible d'être plus sûre .
Travailler sans l'index
Sur la base des commentaires et des votes, j'ai réalisé que beaucoup de gens utilisent l'index tout le temps. Je ne. Voici comment:
Valider l'intégralité de ma copie de travail (le cas typique): git commit -a
N'engagez que quelques fichiers: git commit (list of files)
Validez tous les fichiers sauf quelques-uns, git commit -apuis modifiez viagit gui
Examinez graphiquement toutes les modifications apportées à la copie de travail: git difftool --dir-diff --tool=meld
@Martin: Je suppose que cela dépend de votre flux de travail. Dans mon approche, je n'utilise jamais directement l'index. Quand je veux sauvegarder mon travail, je fais juste des commits complets avec git commit -a. Lorsque je répondais à cette question, c'était parce que j'avais fait (une exotique) " sélection de cerise inverse " qui met les fichiers dans l'index pour vous, mais je voulais éditer un fichier avant de valider. J'ai retiré le fichier de l'index pendant que je le modifiais pour que les différences fonctionnent comme d'habitude.
2015
mon cas d'utilisation était très étroit et inutile en effet: créer une branche; ajouter un dossier rempli de fichiers pour la branche uniquement; passer en maître; fusionner; ops, ajouté le mauvais dossier au master, ajoutez-le à gitignore; les fichiers ne seraient pas supprimés de la validation - accordé, une meilleure solution serait simplement d'utiliser rmimmédiatement, mais j'ai d'abord pensé que changer de branche ne tuerait pas le dossier ignoré . mais ... J'utilise l'outil github "basé sur gui" qui est assez bon pour moi et supporte une certaine gestion d'index, sauf qu'il ne le supporte pas. alors quoi, dois-je utiliser 2 gui pour une utilisation étroite? ne peut toujours pas être d'accord avec la réponse.
cregox
3
C'est une réponse décidément impopulaire. Cependant, je suis tout à fait sûr que l'approche que je suggère est la bonne pour certaines personnes (moi y compris). J'utilise l'un de ces outils pour manipuler l'index plusieurs fois par an.
nobar
1
De nos jours, les éditeurs de programmation et les IDE sont susceptibles de prendre en charge la manipulation d'index graphique. Au moins l' Atom de GitHub le fait.
nobar
1
Je préfère une interface cli à gui tous les jours, même si c'est plus dangereux. Cela me permettra d'utiliser git même sans gui, ce que je trouve réconfortant (au lieu d'être perdu lorsque je ne peux pas installer de tels outils sur un serveur distant par exemple). Tout cela dit, cette réponse est parfaitement valable et ne mérite pas de downvotes "élite cli", +1 pour avoir fourni une bonne alternative à l'interface graphique!
Réponses:
Tu veux:
Si vous omettez cette
--cached
option, elle sera également supprimée de l'arborescence de travail.git rm
est légèrement plus sûr quegit reset
, car vous serez averti si le contenu mis en scène ne correspond pas à la pointe de la branche ou au fichier sur le disque. (Si ce n'est pas le cas, vous devez ajouter--force
.)la source
git rm --cached
pour les supprimer du référentiel, ajouter les fichiers ou répertoires pertinents à .gitignore, mettre en scène et valider normalement. Ils disparaîtront du dépôt mais resteront intacts dans votre arbre local, et vous ne les archiverez plus accidentellement.Cela devrait supprimer un <fichier> pour vous (sans supprimer ou autrement modifier le fichier):
la source
HEAD
.HEAD
!pour supprimer un fichier particulier de l'index.
et
git reset HEAD
pour supprimer tous les fichiers indexés.
la source
Selon votre flux de travail, cela peut être le genre de chose dont vous avez rarement besoin pour qu'il soit inutile d'essayer de trouver une solution en ligne de commande (à moins que vous ne travailliez sans interface graphique pour une raison quelconque).
Utilisez simplement l'un des outils basés sur l'interface graphique qui prennent en charge la gestion des index, par exemple:
git gui
<- utilise le cadre de fenêtrage Tk - style similaire àgitk
git cola
<- une interface graphique de style plus moderneCeux-ci vous permettent de déplacer des fichiers dans et hors de l'index par pointer-cliquer. Ils prennent même en charge la sélection et le déplacement de parties d'un fichier (modifications individuelles) vers et depuis l'index.
Que diriez-vous d'une perspective différente: si vous vous trompez en utilisant l'une des commandes suggérées, plutôt cryptiques:
git rm --cached [file]
git reset HEAD <file>
... vous avez une réelle chance de perdre des données - ou du moins de les rendre difficiles à trouver. À moins que vous n'ayez vraiment besoin de le faire à très haute fréquence, l' utilisation d'un outil GUI est susceptible d'être plus sûre .
Travailler sans l'index
Sur la base des commentaires et des votes, j'ai réalisé que beaucoup de gens utilisent l'index tout le temps. Je ne. Voici comment:
git commit -a
git commit (list of files)
git commit -a
puis modifiez viagit gui
git difftool --dir-diff --tool=meld
la source
git commit -a
. Lorsque je répondais à cette question, c'était parce que j'avais fait (une exotique) " sélection de cerise inverse " qui met les fichiers dans l'index pour vous, mais je voulais éditer un fichier avant de valider. J'ai retiré le fichier de l'index pendant que je le modifiais pour que les différences fonctionnent comme d'habitude.rm
immédiatement, mais j'ai d'abord pensé que changer de branche ne tuerait pas le dossier ignoré . mais ... J'utilise l'outil github "basé sur gui" qui est assez bon pour moi et supporte une certaine gestion d'index, sauf qu'il ne le supporte pas. alors quoi, dois-je utiliser 2 gui pour une utilisation étroite? ne peut toujours pas être d'accord avec la réponse.