Entfernen Sie eine vorhandene Datei aus einem Git Repo

Antworten:

143

Nur um die vollständige Antwort auf einmal zu geben:

  1. von klemens: Sie müssen die Datei .gitignoreirgendwo über der unerwünschten Datei im Repo zu Ihrer Datei hinzufügen . dh

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

  2. von m. narebski: Sie müssen dann die Datei aus dem Repo entfernen, indem Sie "ausführen git rm --cached <file>und diese Entfernung dann festschreiben".

Wenn Sie auch gehofft haben, dass das Repo so aussieht, als hätte es diese Datei nie verfolgt, ist dies viel komplizierter und äußerst entmutigend, da es nicht nur brandneue Commits für jedes einzelne Commit in Ihrer Geschichte erstellt und so die Interoperabilität auf böse Weise zerstört zwischen anderen Personen, die Ihr Repo geklont haben, aber es lässt auch jeden dieser Commits ungetestet (vorausgesetzt, Sie testen Ihre Commits, bevor Sie sie machen).

In Anbetracht dieser Einschränkung ist das Werkzeug, nach dem Sie suchen, wenn dies Ihr Ziel ist filter-branch. Das erste Beispiel macht genau das, was ich beschreibe.

Tim Visher
quelle
3
Mit git rm --cached scheint es nicht nur den Zweig entfernt zu haben, sondern wenn ich auf ein anderes System ziehe, werden die Dateien auf diesem System physisch gelöscht. Irgendeine Idee, was dort los ist?
Biagidp
2
Antwort auf das oben Gesagte: Ich glaube, das Problem bestand darin, dass ich vor dem Abrufen der Änderungen keinen .gitignore auf dem alternativen System installiert hatte, sodass beim Löschen die lokale Kopie entfernt wurde. Zumindest ist das die Theorie
Biagidp
53

Verwenden Sie einfach, um die Verfolgung der Datei zu beenden git rm --cached <filename>.

Wie die anderen hier bereits betont haben, kann das Hinzufügen der Datei zu .gitignore verhindern, dass Sie sie später versehentlich erneut hinzufügen.

Kusma
quelle
1

Fügen Sie die Gitignore-Datei hinzu.

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

fetzig
quelle
13
Dies ist nur die Hälfte der Antwort. .gitignoreEinträge gelten nicht für Dateien, die bereits verfolgt werden.
CB Bailey
10
Der zweite Teil ist git rm --cached <file>und dann diese Entfernung zu begehen.
Jakub Narębski
1
Warum gibt es für git keinen einfachen Befehl, um alle derzeit verfolgten Dateien gemäß der aktuellen .gitignore-Datei neu zu bewerten? ... oder übt das viel zu viel gesunden Menschenverstand aus? : p
Alexander - Reinstate Monica