Ich möchte ein ganzes Verzeichnis (rekursiv) aus dem Verlauf meines Git-Repositorys wiederherstellen.
Es gibt nur 1 Zweig (Master).
Ich kenne das Commit, bei dem Fehler enthalten waren.
Kann ich den sha1-Hash des übergeordneten Commits verwenden, um den Status des Verzeichnisses wiederherzustellen, wie er war, bevor die Fehler aufgenommen wurden?
Ich dachte über so etwas nach:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/
aber es hat nicht funktioniert.
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
Antworten:
Versuchen Sie, '-' zwischen Revisionen und Pfaden hinzuzufügen:
Wenn Sie ein Verzeichnis aus dem vorherigen Commit wiederherstellen möchten, können Sie den Commit-Hash durch HEAD ~ 1 ersetzen, zum Beispiel:
quelle
rm -Rf path/to/the/folder
damaligesgit checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
Ergebnis gemacht: Dieser Pfad hatte genau die gleichen Dateien wie in diesem Commit, keine Unterschiede und keine zusätzlichen Dateien, die nach diesem Commit erstellt wurden. Welches ist was ich will.--
tun?Es gibt zwei einfache Möglichkeiten, dies zu tun:
Wenn das Commit, das die Fehler enthielt, nur die Fehler enthielt, verwenden Sie
git revert
, um die Auswirkungen umzukehren.Wenn nicht, ist der einfache Weg folgender:
git checkout 348…
cp -a path/to/the/folder ../tmp-restore-folder
git checkout HEAD # or whatever
rm -rf path/to/the/folder
mv ../tmp-restore-folder path/to/the/folder
git add path/to/the/folder
git commit -m "revert …"
quelle
Wenn Sie dies einfach tun
git checkout <SHA-ID>
, werden Sie vorübergehend zu diesem Sha-Commit versetzt.Jedes Festschreibungsobjekt enthält zu diesem Zeitpunkt die gesamte Struktur der Festplatte. Wenn Sie also Dateien dort haben und diese kopieren müssen, können Sie dies tun. Achtung, Sie befinden sich nicht in einem Zweig, daher müssen Sie zum Master zurückkehren, bevor Sie die Datei in Ihren Arbeitsbaum kopieren und festschreiben.
quelle