3882 Stimmen

Entfernen einer Datei aus einem Git-Repository, ohne sie aus dem lokalen Dateisystem zu löschen

Mein erster Commit enthielt einige Protokolldateien. Ich habe hinzugefügt *log zu meinem .gitignore und jetzt möchte ich die Protokolldateien aus meinem Repository entfernen.

git rm mylogfile.log

entfernt eine Datei aus dem Repository, aber auch aus dem lokalen Dateisystem.

Wie kann ich diese Datei aus dem Repo entfernen? ohne meine lokale Kopie der Datei zu löschen?

54 Stimmen

Es ist erwähnenswert, dass die am meisten hochgestimmte Antwort für einige gefährlich ist. Wenn Sie ein entferntes Projektarchiv verwenden, dann ziehen Sie, wenn Sie Ihr lokales Projektarchiv pushen, nur die Dateien, die Sie aus Git entfernt haben, woanders hin WIRD GELÖSCHT . Dies wird in einer der Antworten erwähnt, aber nicht weiter kommentiert.

2 Stimmen

Um es auf die richtige Weise zu tun: stackoverflow.com/questions/57418769/

5435voto

bdonlan Punkte 213545

Von der Man-Datei :

Wenn --cached angegeben wird, muss der bereitgestellte Inhalt entweder mit der Spitze der Verzweigung oder der Datei auf der Festplatte übereinstimmen, so dass die Datei nur aus dem Index entfernt werden kann.

Also, für eine einzelne Datei:

git rm --cached mylogfile.log

und für ein einzelnes Verzeichnis:

git rm --cached -r mydirectory

209 Stimmen

Leicht zu übersehen, weil es nicht so selbsterklärend ist wie svn rm --keep-local .

145 Stimmen

Aber wie bewahre ich die Dateien auf entfernten Servern auf? Dies hält meine lokale, aber wenn ich Push-und Pull von einem anderen Server, wird die Datei gelöscht. Ich habe auch eine .gitignore für die Datei hinzugefügt, aber sie wird immer noch entfernt

19 Stimmen

Dies entfernt immer noch die Dateien auf git pull wenn Sie hinter dem Commit stehen, nachdem git rm

327voto

Sam Tyson Punkte 4357

Um einen ganzen Ordner aus dem Repo zu entfernen (z.B. Resharper-Dateien), gehen Sie folgendermaßen vor:

git rm -r --cached folderName

Ich hatte einige Resharper-Dateien übertragen und wollte nicht, dass diese für andere Projektbenutzer bestehen bleiben.

14 Stimmen

Nur ein zusätzlicher Hinweis für zukünftige Besucher: Verwenden Sie keine grafische Benutzeroberfläche, um die Übertragung zurück in die Projektgruppe zu synchronisieren. Dadurch werden die Dateien zurück in Ihr lokales Projektarchiv gezogen. Sie müssen eine Git Push repo branch um die Dateien tatsächlich von der Fernbedienung zu entfernen.

301voto

null Punkte 3410

Sie können auch Dateien aus dem Repository anhand Ihrer .gitignore entfernen, ohne sie aus dem lokalen Dateisystem zu löschen:

git rm --cached `git ls-files -i -X .gitignore`

Oder, alternativ, auf Windows Powershell:

git rm --cached $(git ls-files -i -X .gitignore)

8 Stimmen

Funktioniert nicht unter Windows. git ls-files -i -X .gitignore funktioniert, aber ich weiß nicht, wie ich die Dateien an "git rm" senden kann. Wissen Sie, wie man das macht?

19 Stimmen

Funktioniert unter Windows, wenn Sie Git Bash anstelle der cmd-Konsole verwenden

18 Stimmen

Ich liebe das. Funktioniert, außer dass ich einige Dateien hatte, die Leerzeichen im Dateinamen hatten. Ich änderte Lösung hier zu diesem: git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}" . Bitte erwägen Sie, diese Lösung zu ändern oder der Antwort hier hinzuzufügen, denn es ist ein großartiges Werkzeug, das...

130voto

Suresh Karia Punkte 16241

Wie in meiner Antwort hier: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository

Um Ordner/Verzeichnisse oder Dateien nur aus dem Git-Repository und nicht aus dem lokalen Verzeichnis zu entfernen, führen Sie 3 einfache Schritte aus.


Schritte zum Entfernen des Verzeichnisses

git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master

Schritte, um diesen Ordner bei den nächsten Übertragungen zu ignorieren

Um diesen Ordner bei den nächsten Übertragungen zu ignorieren, erstellen Sie eine Datei in Root mit dem Namen .gitignore und geben Sie den Namen des Ordners dort ein. Sie können so viele Namen eingeben, wie Sie möchten

.gitignore Die Datei sieht dann wie folgt aus

/FolderName

remove directory

4 Stimmen

Werden dadurch jedoch die lokalen Dateien anderer Personen gelöscht, wenn diese Ihre Änderungen abrufen?

82voto

mAsT3RpEE Punkte 1730

Eine allgemeinere Lösung:

  1. Editar .gitignore Datei.

    echo mylogfile.log >> .gitignore

  2. Alle Einträge aus dem Index entfernen.

    git rm -r -f --cached .

  3. Index wiederherstellen.

    git add .

  4. Neue Übertragung vornehmen

    git commit -m "Removed mylogfile.log"

3 Stimmen

Wird dadurch die Datei tatsächlich gelöscht?

6 Stimmen

Von GitHub? NEIN. Wenn Sie das Projekt bereits auf GitHub veröffentlicht haben, wird es nicht von der Website entfernt. Aber es wird Ihr lokales Git-Repository aktualisieren.

8 Stimmen

Der Kommentar, den Sie gelöscht haben, war eigentlich eher beseitigt :) Das Problem mit der Lösung rm --cashed ist, dass es schließlich die Datei löschen wird, wenn man zieht - richtig? Und das ist nicht das, was die Leute wollen, wenn sie sagen "Entferne eine Datei aus dem Repository ohne sie aus dem lokalen Dateisystem zu löschen ". Warum nun die obige Lösung akzeptiert wurde, ist mir schleierhaft - wahrscheinlich hat der OP allein gearbeitet und nie gezogen? Ich weiß es nicht. Ich verstehe die Github "einmal gepusht immer da" Problem ofc

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