Ich habe eine Datei mit dem Namen "file1.txt"
Git-Repository hinzugefügt . Danach habe ich es festgeschrieben, ein paar Verzeichnisse namens dir1
und hinzugefügt dir2
und sie in das Git-Repository festgeschrieben.
Nun ist die aktuelle Repository hat "file1.txt"
, dir1
und dir2
. Wie kann ich löschen, "file1.txt"
ohne andere zu beeinflussen, wie dir1
und dir2
?
git rm
ist die richtige Antwort, aber denken Sie daran, dass die Datei noch im Verlauf vorhanden ist. Wenn Sie eine Datei entfernen möchten, weil sie vertrauliche Informationen enthält, müssen Sie etwas drastischeres tun. (Das Ändern des Verlaufs, insbesondere für Inhalte, die Sie bereits gepusht haben, ist eine drastische Maßnahme und sollte nach Möglichkeit vermieden werden.)Antworten:
Verwenden Sie
git rm
.Wenn Sie die Datei aus dem Git-Repository und dem Dateisystem entfernen möchten , verwenden Sie:
Wenn Sie die Datei jedoch nur aus dem Git-Repository und nicht aus dem Dateisystem entfernen möchten, verwenden Sie:
Und um Änderungen an Remote Repo zu pushen
quelle
git rm file.txt
Entfernt die Datei aus dem Repo, löscht sie aber auch aus dem lokalen Dateisystem .Um die Datei aus dem Repo zu entfernen und nicht aus dem lokalen Dateisystem zu löschen, verwenden Sie:
git rm --cached file.txt
In der folgenden genauen Situation verwende ich git, um die Versionskontrolle für die Website meines Unternehmens aufrechtzuerhalten. Das Verzeichnis "mickey" war jedoch ein tmp-Ordner, um private Inhalte für einen CAD-Entwickler freizugeben. Als er RIESIGE Dateien brauchte, habe ich ein privates, nicht verknüpftes Verzeichnis erstellt und die Dateien dort per FTP gespeichert, damit er sie über den Browser abrufen kann. Ich vergaß dies und führte später eine
git add -A
aus dem Basisverzeichnis der Website durch. Anschließend wurdengit status
die neuen Dateien angezeigt, die festgeschrieben werden müssen. Jetzt musste ich sie aus Git's Tracking und Versionskontrolle löschen ...Die folgende Beispielausgabe stammt von dem, was mir gerade passiert ist, als ich die
.003
Datei unbeabsichtigt gelöscht habe . Zum Glück ist es mir egal, was mit der lokalen Kopie passiert ist.003
, aber einige der anderen derzeit geänderten Dateien waren Updates, die ich gerade auf der Website vorgenommen habe, und es wäre episch, wenn sie im lokalen Dateisystem gelöscht worden wären! "Lokales Dateisystem" = die Live-Website (keine gute Praxis, aber Realität) .Update: Diese Antwort erhält etwas Verkehr, daher dachte ich, ich würde erwähnen, dass meine andere Git-Antwort einige großartige Ressourcen enthält: Diese Seite enthält eine Grafik, die mir dabei hilft, Git zu entmystifizieren. Das "Pro Git" Buch ist online und hilft mir sehr.
quelle
git commit -m "Just removing file1.txt"
und dann, wenn Sie ein Remote-Repository haben, das Festschreiben mit so etwas wie pushengit push origin master
.Wenn Sie
git rm
insbesondere für mehrere Dateien verwenden, sollten Sie zunächst berücksichtigen, dass ein Platzhalter von der Shell und nicht vomgit
Befehl aufgelöst wird.Wenn sich Ihre Datei jedoch bereits auf GitHub befindet, können Sie sie (seit Juli 2013) direkt von der Web-GUI löschen!
Dann "
git pull
" auf Ihrem lokalen Repo, und das löscht die Datei auch lokal.Was macht diese Antwort zu einer (Umweg-) Möglichkeit, eine Datei aus Git Repo zu löschen?
(Ganz zu schweigen davon, dass eine Datei auf GitHub ist in einem „git Repo“)
(Das Commit spiegelt das Löschen dieser Datei wider.):
Der letzte Satz bedeutet, dass die gelöschte Datei immer noch Teil des Verlaufs ist und Sie sie problemlos wiederherstellen können (jedoch noch nicht über die GitHub-Weboberfläche):
Siehe " Wiederherstellen einer gelöschten Datei in einem Git-Repo ".
quelle
Dies ist die einzige Option, die für mich funktioniert hat.
Hinweis: Ersetzen Sie * .sql durch Ihren Dateinamen oder Dateityp. Seien Sie sehr vorsichtig, da dies jedes Commit durchläuft und diesen Dateityp herausreißt.
BEARBEITEN: Achten Sie darauf - nach diesem Befehl können Sie nicht mehr drücken oder ziehen - Sie sehen die Ablehnung von 'nicht verwandter Verlauf'. Sie können 'git push --force -u origin master' verwenden, um zu drücken oder zu ziehen
quelle
git push --force -u origin master
Wenn es sich um einen zu entfernenden Ordner und nachfolgende untergeordnete Ordner oder Dateien handelt, verwenden Sie außerdem:
quelle
Use git rm --cached -r <foldername>
Im Allgemeinen
git help
hilft bei zumindest einfachen Fragen wie diesen:quelle
git help
verwirrend, aber es ist gut für die einfachen Dinge :)rm
eine Datei gelöscht wird, anstatt sie aus dem Index zu entfernen (obwohl sie für Noobs immer noch bedeutungslos ist).Wenn Sie die Datei aus dem Repo löschen möchten, sie aber im Dateisystem belassen möchten (wird nicht mehr verfolgt):
Wenn Sie die Datei aus dem Repo und aus dem Dateisystem löschen möchten, gibt es zwei Möglichkeiten:
Wenn die Datei keine Änderungen im Index enthält:
Wenn die Datei Änderungen im Index enthält:
quelle
git rm
wird von nun an nur noch die Datei in diesem Zweig entfernen, aber sie bleibt im Verlauf und Git wird sich daran erinnern.Der richtige Weg ist
git filter-branch
, wie andere hier erwähnt haben. Jedes Commit im Verlauf des Zweigs wird neu geschrieben, um diese Datei zu löschen.Aber auch danach kann sich git daran erinnern, weil es in Reflog, Fernbedienungen, Tags und dergleichen Verweise darauf geben kann.
Wenn Sie es in einem Schritt vollständig auslöschen möchten, empfehle ich Ihnen, es zu verwenden
git forget-blob
https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/
Es ist einfach, mach es einfach
git forget-blob file1.txt
.Dadurch werden alle Verweise entfernt, ausgeführt
git filter-branch
und schließlich der Git-Garbage-Collectorgit gc
ausgeführt, um diese Datei in Ihrem Repo vollständig zu entfernen .quelle
Eine andere Möglichkeit, wenn Sie die Datei mit dem Befehl rm aus Ihrem lokalen Ordner löschen und die Änderungen dann auf den Remote-Server übertragen möchten.
quelle
Hinweis: Wenn Sie nur Dateien aus Git löschen möchten, verwenden Sie Folgendes:
Wenn Sie auch von der Festplatte löschen möchten:
Wenn Sie einen Ordner entfernen möchten (der Ordner enthält möglicherweise nur wenige Dateien), sollten Sie ihn wie folgt mit dem rekursiven Befehl entfernen:
Wenn Sie einen Ordner in einem anderen Ordner entfernen möchten
Dann können Sie
commit
undpush
wie gewohnt. Wenn Sie jedoch gelöschte Ordner wiederherstellen möchten, können Sie folgende Schritte ausführen : Das Wiederherstellen gelöschter Dateien aus Git ist möglich.Lesen Sie mehr über das offizielle Dokument.
quelle
So löschen Sie eine bestimmte Datei
So entfernen Sie alle nicht verfolgten Dateien rekursiv in einem einzigen Schuss aus einem Verzeichnis
quelle
Wenn Sie die Anwendung GitHub für Windows haben, können Sie eine Datei in 5 einfachen Schritten löschen:
quelle
In meinem Fall habe ich versucht, die Datei auf Github nach wenigen Commits zu entfernen, aber auf dem Computer zu speichern
und später wurde diese Datei ignoriert
quelle
Entfernen Sie zunächst die Dateien aus dem lokalen Repository.
oder entfernen Sie Dateien nur aus dem lokalen Repository, aber aus dem Dateisystem
Zweitens: Übernehmen Sie Änderungen in das lokale Repository.
Schließlich aktualisieren / pushen Sie lokale Änderungen in das Remote-Repository.
quelle
Ich habe viele der vorgeschlagenen Optionen ausprobiert und keine schien zu funktionieren (ich werde die verschiedenen Probleme nicht auflisten). Was ich letztendlich tat, was funktionierte, war einfach und intuitiv (für mich):
quelle
Nachdem Sie die Datei mit aus dem Repo entfernt haben
git rm
, können Sie mit BFG Repo-Cleaner die Datei vollständig und einfach aus dem Repo-Verlauf löschen.quelle
Ich habe obj- und bin-Dateien, die es versehentlich in das Repo geschafft haben, dass ich meine Liste der geänderten Dateien nicht verschmutzen möchte
Nachdem ich bemerkt hatte, dass sie zur Fernbedienung gingen, ignorierte ich sie, indem ich dies hinzufügte
.gitignore
Das Problem ist, dass sie sich bereits auf der Fernbedienung befinden. Wenn sie geändert werden, werden sie als geändert angezeigt und verschmutzen die Liste der geänderten Dateien.
Um sie nicht mehr zu sehen, müssen Sie den gesamten Ordner aus dem Remote-Repository löschen.
In einer Eingabeaufforderung:
C:\repos\MyRepo
)C:\repos\MyRepo\SSIS
)git rm -r -f obj
git commit -m "remove obj folder"
Ich habe eine alarmierende Meldung erhalten, dass 13 Dateien 315222 Löschungen geändert haben
Da ich die CMD-Zeile nicht nachschlagen musste, ging ich zu Visual Sstudio und führte eine Synchronisierung durch, um sie auf die Fernbedienung anzuwenden
quelle
Wenn Sie Dateien aus einer bestimmten Erweiterung entfernen müssen (z. B. kompilierte Dateien), können Sie folgende Schritte ausführen, um alle Dateien gleichzeitig zu entfernen:
quelle
Laut Dokumentation .
git rm --cached giant_file
Wenn es um vertrauliche Daten geht, sagen Sie besser nicht, dass Sie die Datei entfernt haben, sondern fügen Sie sie einfach in das letzte bekannte Commit ein:
0. Letzte Festschreibung ändern
Wenn Sie die Datei aus dem gesamten Git-Verlauf löschen möchten, sollten Sie gemäß der Dokumentation Folgendes tun:
1. Entfernen Sie es aus Ihrem lokalen Verlauf
3. Wenn Sie von der Fernbedienung entfernen müssen
4. Wenn Sie es auch aus Tag-Releases entfernen müssen:
quelle
Wenn Sie nicht in Ihrem lokalen Repo, sondern in Git Repo archivieren, öffnen Sie einfach die Datei in Git Repo über die Weboberfläche und suchen Sie die Schaltfläche Löschen in der rechten Ecke der Benutzeroberfläche. Klicken Sie hier, um die Option zum Löschen der Benutzeroberfläche anzuzeigen
quelle