8100 Stimmen

Wie kann ich Git dazu bringen, eine Datei zu "vergessen", die verfolgt wurde, aber jetzt in .gitignore ist?

Es gibt eine Datei, die von Git verfolgt wurde, aber jetzt ist die Datei in der .gitignore Liste.

Diese Datei taucht jedoch weiterhin in git status nachdem es bearbeitet wurde. Wie kann man Git zwingen, es komplett zu vergessen?

8690voto

CB Bailey Punkte 693084

.gitignore verhindert, dass nicht verfolgte Dateien hinzugefügt werden (ohne eine add -f ) zu den von Git verfolgten Dateien. Git überwacht jedoch weiterhin alle Dateien, die bereits überwacht werden.

Um eine Datei nicht mehr zu verfolgen, müssen Sie sie aus dem Index entfernen. Dies kann mit diesem Befehl erreicht werden.

git rm --cached <file>

Wenn Sie einen ganzen Ordner löschen wollen, müssen Sie alle darin enthaltenen Dateien rekursiv entfernen.

git rm -r --cached <folder>

Die Datei wird bei der nächsten Übertragung aus der Hauptversion entfernt.

WARNUNG: Dies entfernt zwar nicht die physische Datei von Ihrem lokalen Rechner, aber die Dateien von den Rechnern der anderen Entwickler auf deren nächsten git pull .

3426voto

Matt Frear Punkte 48503

Die nachstehenden Befehle entfernen alle Elemente aus dem Git-Index (nicht aus dem Arbeitsverzeichnis oder dem lokalen Repository) und aktualisieren dann den Git-Index, wobei die Git-Ignorierungen berücksichtigt werden. PS. Index = Cache

Erstens:

git rm -r --cached .
git add .

Dann:

git commit -am "Remove ignored files"

Oder als Einzeiler:

git rm -r --cached . && git add . && git commit -am "Remove ignored files"

1830voto

Konstantin Punkte 15780

git update-index erledigt diese Aufgabe für mich:

git update-index --assume-unchanged <file>

Diese Lösung ist eigentlich unabhängig von .gitignore da Gitignore nur für ungetrackte Dateien gilt.


Update, eine bessere Option

Seitdem diese Antwort veröffentlicht wurde, wurde eine neue Option geschaffen, die bevorzugt werden sollte. Sie sollten verwenden --skip-worktree die für geänderte Dateien gedacht ist, die der Benutzer nicht mehr übertragen und behalten möchte --assume-unchanged für die Leistung, um zu verhindern, dass Git den Status von großen verfolgten Dateien überprüft. Siehe https://stackoverflow.com/a/13631525/717372 für weitere Details...

git update-index --skip-worktree <file>

Abbrechen

git update-index --no-skip-worktree <file>

380voto

thSoft Punkte 20471
git ls-files -c --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

Dieser Vorgang nimmt die Liste der ignorierten Dateien, entfernt sie aus dem Index und überträgt die Änderungen.

145voto

youhans Punkte 5076

Die Antwort lautet: Kopieren und Einfügen:

git rm --cached -r .; git add .; git status; git commit -m "Ignore unwanted files"

Dieser Befehl ändert NICHT den Inhalt der Datei .gitignore Datei. Es ignoriert einfach die Dateien, die bereits in ein Git-Repository übertragen wurden, aber jetzt haben wir sie zu .gitignore .

Der Befehl git status; dient nur der Überprüfung der Änderungen und kann entfallen.

Am Ende werden die Änderungen sofort mit der Meldung " Unerwünschte Dateien ignorieren ".

Wenn Sie die Änderungen nicht festschreiben wollen, lassen Sie den letzten Teil des Befehls ( git commit -m "Ignore unwanted files" )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X