git mostra ancora i file come modificati dopo l'aggiunta a .gitignore


286

lo sto aggiungendo al file .gitignore

.idea/*

ma comunque lo stato è:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

Che cosa sto facendo di sbagliato ? ho anche aggiunto .idea / * al global ~ / .gitignore_global ma git status, comunque mi mostra:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

Risposte:


460

Il tuo .gitignoresta funzionando, ma tiene ancora traccia dei file perché erano già nell'indice.

Per fermare questo devi fare: git rm -r --cached .idea/

Quando effettui il commit, la .idea/directory verrà rimossa dal tuo repository git e i seguenti commit ignoreranno la .idea/directory.

PS: potresti usare .idea/invece di .idea/*ignorare una directory. Potete trovare maggiori informazioni sui modelli alla .gitignore pagina man .


Utile citazione dalla git-rmpagina man

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.

3
@Mehrad non c'è bisogno del * in .gitignore
Steve Pitchers

2
No, la semplice aggiunta di .idea / non funziona, perché come hai detto nella risposta, è già nell'indice.
Henrique de Sousa

15
Quindi stai dicendo che è necessario commitdopo aver rimosso i file memorizzati nella cache? Sembra davvero controintuitivo; questi sono file che NON voglio inserire. E non voglio che vengano cancellati dal repository (voglio solo che non siano più in giro a ingombrare il mio git status). O sono solo davvero confuso?
SMBiggs

6
I suoi file erano già stati tracciati da git a causa di un commit precedente, quindi per rimuoverli, devi creare un nuovo commit che li rimuove dal repository.
mcls

1
git rm -r --cached *Ho usato questo comando per rimuovere tutti quei tipi di file che sono memorizzati nella cache ... ma ha rimosso tutti i miei file ... per favore aiutami ad annullare questa azione! @maartencls
ascii_walker

59

Le persone che potrebbero ancora cercare questo problema, stanno guardando solo questa pagina.

Ciò ti aiuterà a rimuovere i file indice memorizzati nella cache e quindi ad aggiungere solo quelli necessari, comprese le modifiche al .gitignorefile.

1. git rm -r --cached .  
2. git add .
3. git commit -m 'Removing ignored files'

Ecco qualche informazione in più.

  1. Questo comando rimuoverà tutti i file memorizzati nella cache da index.
  2. Questo comando aggiungerà tutti i file eccetto quelli menzionati in gitignore.
  3. Questo comando eseguirà nuovamente il commit dei tuoi file e rimuoverà i file che vuoi che git ignori, ma li manterrà nella tua directory locale.

1
Questo è stato utile per me, vorrei solo notare che in Windows cmd le virgolette singole non sembrano funzionare in # 3. L'uso di git commit -am "Rimozione di file ignorati" funziona, però.
Sundance

1
Nessun problema, e grazie ancora per la risposta chiara e concisa.
Sundance

2
Questa soluzione sta davvero incasinando i miei file di progetto. Ho dovuto ripristinare tutto dopo averlo fatto.
Fatmajk

3

Le soluzioni offerte qui e in altri luoghi non hanno funzionato per me, quindi aggiungerò alla discussione per i futuri lettori. Devo ammettere che non ho ancora compreso appieno la procedura, ma ho finalmente risolto il mio problema (simile) e voglio condividerlo.

Avevo accidentalmente memorizzato nella cache alcune directory di documenti con diverse centinaia di file quando lavoravo con git in IntelliJ IDEA su Windows 10, e dopo averle aggiunte a .gitignore(e PROBABILMENTE spostandole un po ') non sono riuscito a rimuoverle dalla lista di modifiche predefinita.

Prima ho confermato i cambiamenti effettivi che avevo fatto, poi ho risolto il problema - mi ci è voluto troppo tempo. Ho provato git rm -r --cached .ma otterrei sempre path-specERRORI, con diverse varianti dei flag e path-speccon i flag -fe -r.

git statusmostrava ancora i nomi dei file, quindi ho provato a usare alcuni di quelli testualmente con git rm -cached, ma senza fortuna. Nascondere e rimuovere le modifiche sembrava funzionare, ma sono stati messi di nuovo in coda dopo un po '(sono un po' confuso sull'intervallo di tempo esatto). Ho finalmente rimosso queste voci per un buon utilizzo

git reset

Presumo che questa sia solo una BUONA IDEA quando non ci sono modifiche messe in scena / memorizzate nella cache che si desidera effettivamente eseguire il commit.


Grazie! Sì, ho avuto questo problema dopo aver cambiato rami con .gitignores diversi - Il client desktop Github ha deciso di organizzare i file per il commit
jameslol

2

Aggiungi semplicemente git rm -r --cached <folder_name/file_name>

A volte, aggiorni il file .gitignore dopo il comando commit dei file. Quindi, i file vengono memorizzati nella cache. Per rimuovere i file memorizzati nella cache, utilizzare il comando precedente.


-2
  1. Git add.

  2. Stato Git // Controlla il file che viene modificato

    // git reset HEAD --- sostituisci il file che vuoi ignorare

  3. git reset HEAD .idea / <- Coloro che volevano escludere .idea da prima del commit // git controlla lo stato e il file idea sarà sparito, e sei pronto per partire!

  4. git commit -m ''

  5. git push


Sarebbe un presupposto che l'OP voglia ripristinare.
SovietFrontier
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.