Ich habe eine Datei mit Git gelöscht und dann festgeschrieben, sodass die Datei nicht mehr in meiner Arbeitskopie enthalten ist. Ich möchte den Inhalt dieser Datei anzeigen, aber nicht wiederherstellen. Wie kann ich das machen?
Ich habe eine Datei mit Git gelöscht und dann festgeschrieben, sodass die Datei nicht mehr in meiner Arbeitskopie enthalten ist. Ich möchte den Inhalt dieser Datei anzeigen, aber nicht wiederherstellen. Wie kann ich das machen?
Antworten:
git show HEAD^:path/to/file
Sie können eine explizite Festschreibungskennung verwenden oder HEAD~nältere Versionen anzeigen oder wenn seit dem Löschen mehr als eine Festschreibung stattgefunden hat.
fatal: Invalid object name 'HEAD^'.(ich muss erwähnen, dass ich nur "Initial Commit" habe)
Wenn dies eine Datei ist, die Sie vor einiger Zeit gelöscht haben und nicht nach einer Revision suchen möchten , können Sie Folgendes verwenden (die Datei wird fooin diesem Beispiel benannt; Sie können einen vollständigen Pfad verwenden):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
Der rev-listAufruf sucht nach allen Revisionen von foo, listet jedoch nur eine auf. Da rev-listListen in umgekehrter chronologischer Reihenfolge aufgeführt sind, wird die letzte geänderte Revision aufgelistet. Dies foowäre das gelöschte Commit foo. (Dies basiert auf der Annahme, dass git nicht zulässt, dass eine gelöschte Datei geändert wird und dennoch gelöscht bleibt .) Sie können nicht einfach die Revision verwenden, die rev-listunverändert zurückgegeben wird, da sie dort foonicht mehr vorhanden ist. Sie müssen nach der unmittelbar davor stehenden fragen, die die letzte Revision der Datei enthält, daher die ^in git show.
**/foowenn Sie den Pfad nicht kennen (dies funktioniert für den Befehl rev-list, jedoch nicht für den Befehl show. Mit dem Commit aus dem Befehl rev-list können Sie dann den Pfad finden).
Da Sie sich möglicherweise nicht an den genauen Pfad erinnern, können Sie stattdessen sha1 aus dem Git-Protokoll abrufen und dann einfach ausgeben
git cat-file -p <sha1>
git whatchanged --no-abbrevliefert eine Ausgabe ähnlich der von git (oder svn) log.
path/to/filevollständige Pfad vom Anfang des Projekts (oberstes Verzeichnis des Repositorys) ist.