Ich habe versehentlich einen Ordner mit Bildern hinzugefügt und festgeschrieben. Dann habe ich noch ein Commit gemacht. Dann habe ich diese Dateien mit entfernt git rm -f ./images
und erneut festgeschrieben.
Im Moment habe ich viel mehr Commits in diesem Zweig gemacht (Master). In meinem HEAD habe ich diesen ./static/images
Ordner nicht.
Aufgrund dessen hat sich meine Repo-Größe stark erhöht. Wie kann ich diese Blobs vollständig entfernen? Und ich möchte es auch von meinem entfernten GitHub-Repo entfernen.
git
git-remote
git-filter-branch
git-rm
Abhijeet Rastogi
quelle
quelle
Antworten:
Dies ist, wonach Sie suchen: Durch Ignorieren wird keine Datei entfernt . Ich schlage vor, Sie lesen diese Seite, aber hier ist der spezifische Befehl, den Sie verwenden sollten:
git filter-branch --index-filter \ 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
Verwenden Sie außerdem Folgendes, um alle gelöschten Dateien aus den von git erstellten Caches zu entfernen:
Weitere Informationen zum letzten Befehl sowie ein Skript, das alles, was Sie wollen, in einer einzigen Aktion ausführt , finden Sie hier: git: Dateien oder Ordner für immer aus dem Verlauf entfernen .
Ein weiterer Link mit vielen Erklärungen: Entfernen Sie vertrauliche Daten .
[Bearbeiten] Siehe auch diese StackOverflow-Frage: Entfernen Sie vertrauliche Dateien und ihre Commits aus dem Git-Verlauf .
(Befehle, die aus
natacado
der Antwort in der oben verlinkten Frage kopiert wurden .) Wenn Sie die Dateien bereits aus der Arbeitskopie entfernt haben, sollte Folgendes funktionieren. Finden Sie den Hash für das Commit heraus, das die unerwünschten Dateien hinzugefügt hat. Dann mach:git filter-branch --index-filter \ 'git update-index --remove filename' <introduction-revision-sha1>..HEAD git push --force --verbose --dry-run git push --force
quelle
Sie können einfach Ihren gesamten Zweig neu gründen und sowohl das Commit, mit dem die Bilder hinzugefügt wurden, als auch das Commit, mit dem sie entfernt wurden, entfernen.
Sie erhalten eine Liste der Commits. Löschen Sie die Zeilen mit den Rogue-Commits, die Sie entfernen möchten. ("dd" löscht eine Zeile in vim, dem Standardeditor. Speichern Sie dann mit ZZ.)
Die baumelnden Commits werden dann im Verlauf der natürlichen Müllabfuhr bereinigt, ein Vorgang, den Sie mit dem in Darhuuks Antwort angegebenen Befehl erzwingen können.
Bearbeiten: Dies funktioniert auch, wenn Sie in ein Remote-Repository verschoben haben, Sie müssen jedoch mit --force pushen. (Gleiches gilt für die Git-Filter-Branch-Lösung).
Beachten Sie, dass dies für jeden, der aus Ihrer Filiale gezogen hat, sehr ärgerlich ist. Sie sollten "Wiederherstellung von Upstream-Rebase" konsultieren .
Vermutlich ist Ihre ursprüngliche versehentliche Hinzufügung von Bildern Teil eines Commits, das Sie beibehalten möchten. In diesem Fall müssen Sie das Commit während der Rebase bearbeiten, um die Teile aufzuteilen, die Sie behalten möchten. Sie können dies tun, indem Sie "pick" in der Liste "rebase -i" für dieses Commit durch "e" (zum Bearbeiten) ersetzen. Der Rebase-Prozess wird hier gestoppt und Sie können das Commit mit "git commit --amend" teilen.
quelle
Ich wiederhole im Wesentlichen die Antwort in Kombination mit dieser Einschränkung bei der Windows-Formatierung , nur damit sie nicht als Kommentar verloren geht.
Beachten Sie die Verwendung von doppelten Anführungszeichen anstelle von einfachen Anführungszeichen, da dies von der Shell abhängt, die Sie verwenden, wie Zeichenfolgen analysiert werden.
Einzelne Zeile:
Mehrere Zeilen:
quelle