Ich habe den gesamten Inhalt eines Ordners gelöscht und der Ordner ist leer. Ich hatte noch eine Kopie in meinem Remote-Repo. Aber als ich ein gemacht habe, hat git pull
es die gelöschten Dateien nicht zurückgesetzt, soll das nicht?
Also habe ich einige Nachforschungen angestellt und festgestellt, dass Sie eine Datei dadurch zurücksetzen können
git checkout <revision> -- <name of file>
Das funktioniert aber nur bei Dateien.
Wie kann ich alle Dateien im Verzeichnis abrufen?
git
git-checkout
json2021
quelle
quelle
git status
gibt Ihnen einen Hinweis darauf, welche Befehle ausgeführt werden sollenAntworten:
Alles, was Sie mit einer Datei tun können, können Sie auch mit einem Ordner tun.
Beachten Sie auch, dass Sie eine gelöschte Datei in einem Git-Repository suchen und wiederherstellen können
Dateien werden aus dem Arbeitsbaum gelöscht, aber noch nicht festgeschrieben:
Wenn Sie
git add
Ihre Änderungen noch nicht indiziert ( ) haben, können Sie den Inhalt eines Verzeichnisses zurücksetzen:Wenn der Löschvorgang bereits indiziert ist, sollten Sie diesen zuerst zurücksetzen:
Stellen Sie den vollständigen Arbeitsbaum (keinen einzelnen Ordner) wieder her, verlieren Sie jedoch alle nicht festgeschriebenen Änderungen
Wenn Dateien in der Vergangenheit in einem Commit gelöscht wurden:
Suchen Sie das letzte Commit, das den angegebenen Pfad beeinflusst hat. Da sich die Datei nicht im HEAD-Commit befindet, muss sie durch dieses Commit gelöscht worden sein.
Überprüfen Sie dann die Version beim Festschreiben zuvor mit dem
^
Symbol caret ( ):Stellen Sie den vollständigen Arbeitsbaum aus einem entfernten Commit wieder her
quelle
git checkout -- path/to/folder/*
funktioniert nicht Hinweis: Die Frage ist, wie man einen Ordner wiederherstellt, keine DateiHow can I retrieve all the files inside the directory
bedeutet sowohl das Verzeichnis als auch seine Dateien. Aber der Befehl funktioniert überraschenderweise auch bei mir nicht. Ich erinnere mich, dass es vor einem Jahr geschah.git checkout -- path
odergit checkout -- 'path/*'
. In Ihrem Beispiel löschen Sie, mitgit rm
dem das OP nicht zu tun schien. Ich habe Anweisungen für einen solchen Fall hinzugefügt. Vielen Dank!git checkout "<deleting_commit>^" -- <file_path>
Wenn Sie Ihre Änderungen noch nicht festgeschrieben haben, können Sie Inhalte oder ein Verzeichnis zurücksetzen:
Wenn Sie alle Änderungen rückgängig machen möchten, gehen Sie wie folgt vor:
quelle
git checkout -- removed_directory
funktioniert nichtgit checkout -- removed_directory
hat für mich funktioniert, aber ich habe dieses Verzeichnis schon einmal erstellt (durchcheckout
eine der Dateien in diesem Verzeichnis). Nach der Erstellung wurden alle Dateien mit diesem Befehl im Ordner wiederhergestellt.Das einzige, was für mich funktioniert hat, war das Auschecken des Repos in einem anderen Ordner. Angenommen, das aktuelle Repo ist in
/home/me/current
.Ich habe es dann getan
Dadurch wird ein separater Klon des Repos erstellt
/home/me/temp
Ich kann jetzt gehen
/home/me/temp
und tun, was ich will. BeispielsweiseJetzt kann ich den gelöschten Dateiordner zurück kopieren
Und löschen Sie den temporären Ordner
Die Beispiele von
ARBEITE NICHT
Andere Beispiele wie
sind über die gelöschten Dateien hinaus destruktiv. Alle anderen Änderungen gehen ebenfalls verloren.
Ähnlich
wird alle Commits nach verlieren
some-commit
quelle
Ab Git 2.24.0 gibt es einen experimentellen neuen git-Befehl: git restore
quelle
Sie können Dateien oder Ordner mit git restore wiederherstellen.
Hier setzt master ~ 1 Ihren Ordner von Ihrem Master-Zweig auf "1" zurück.
Quelle: https://git-scm.com/docs/git-restore
quelle
Wenn Sie keine bestimmte Datei angeben, sollten Sie in der Lage sein, den vollständigen Inhalt eines bestimmten Commits abzurufen. Wie:
git checkout 264794319e9695ba843cd6
(vorausgesetzt, Hash hat alle Ihre Dateien im richtigen Zustand).Der Grund, warum
pull
Dateien nicht wiederhergestellt werden, ist, dass Git Ihre Löschungen als die jüngste Änderung ansieht und diese zusätzlich zu dem anwendet, was Sie abrufen.(Ich würde empfehlen, in einem neuen Zweig zu experimentieren.)
quelle
Für nicht festgeschriebene Löschungen ist es so einfach:
git reset HEAD rel / path / to / deleted / directory / *
quelle