Rimuovi un file esistente da un Git Repo


Risposte:


143

Solo per dare la risposta completa tutta in una volta:

  1. da Klemens: devi aggiungere il file al tuo .gitignorefile da qualche parte sopra il file indesiderato nel repository. vale a dire

    $ cd $ cat >> .gitignore development.log Cd

  2. da. narebski: è quindi necessario rimuovere il file dal repository eseguendo " git rm --cached <file>e quindi eseguendo questa rimozione"

Se speravi anche di far sembrare il repository come se non avesse mai rintracciato quel file, questo è molto più complicato e altamente scoraggiato in quanto non solo crea nuovi commit per ogni singolo commit nella tua storia, distruggendo così l'interoperabilità in modo brutto tra altre persone che hanno clonato il tuo repository, ma lascia anche ciascuno di quei commit non testati (supponendo che tu collauda i tuoi commit prima di effettuarli).

Con questo avvertimento in mente, lo strumento che stai cercando se questo è il tuo obiettivo filter-branch. Il primo esempio fa esattamente quello che sto descrivendo.


3
usando git rm --cached sembra non solo averlo rimosso dal mio ramo, ma quando tiro su un altro sistema cancella fisicamente i file su quel sistema. Qualche idea di cosa sta succedendo lì?
biagidp,

2
In risposta a quanto sopra: credo che il problema risiedesse nel fatto che non avevo installato .gitignore sul sistema alternativo prima di apportare le modifiche, quindi l'eliminazione ha rimosso la copia locale. Almeno questa è la teoria
biagidp,

53

Per interrompere il tracciamento del file, utilizzare semplicemente git rm --cached <filename>.

Ma come sottolineato dagli altri qui, l'aggiunta del file a .gitignore potrebbe impedirti di aggiungerlo accidentalmente in un secondo momento.


1

aggiungi il file gitignore.

vedi http://git-scm.com/docs/gitignore


13
Questa è solo la metà della risposta. .gitignorele voci non si applicano ai file già tracciati.
CB Bailey,

10
La seconda parte è git rm --cached <file>e quindi eseguire questa rimozione.
Jakub Narębski,

1
Perché non esiste un semplice comando per git per rivalutare tutti i file attualmente tracciati in base al file .gitignore corrente? ... o sta esercitando troppo buon senso? : p
Alexander - Ripristina Monica il
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.