Zusätzlich zu den in den anderen Antworten genannten Optionen können Sie Folgendes verwenden git reset
mit dem Git-Objekt (hash, branch, HEAD~x
, Tag, ...) von Interesse und den Pfad Ihrer Datei:
git reset <hash> /path/to/file
In Ihrem Beispiel:
git reset 27cf8e8 my_file.txt
Das bedeutet, dass es zurückkehrt my_file.txt
zu seiner Version bei der Übergabe 27cf8e8
im Index, während sie im Arbeitsverzeichnis unverändert (also in ihrer aktuellen Version) bleibt.
Von da an sind die Dinge sehr einfach:
- können Sie die beiden Versionen Ihrer Datei mit
git diff --cached my_file.txt
- können Sie die alte Version der Datei loswerden mit
git restore --staged file.txt
(oder, vor Git v2.23, git reset file.txt
) wenn Sie entscheiden, dass es Ihnen nicht gefällt
- können Sie die alte Version wiederherstellen mit
git commit -m "Restore version of file.txt from 27cf8e8"
y git restore file.txt
(oder, vor Git v2.23, git checkout -- file.txt
)
- können Sie Aktualisierungen von der alten zur neuen Version nur für einige Hunks hinzufügen, indem Sie
git add -p file.txt
(dann git commit
y git restore file.txt
).
Und schließlich können Sie sogar interaktiv auswählen, welche(r) Hunk(s) im ersten Schritt zurückgesetzt werden soll(en), wenn Sie laufen:
git reset -p 27cf8e8 my_file.txt
Alors git reset
mit einem Pfad gibt Ihnen viel Flexibilität, um eine bestimmte Version einer Datei abzurufen, um sie mit der aktuell ausgecheckten Version zu vergleichen und, falls Sie dies wünschen, vollständig oder nur für einige Teile zu dieser Version zurückzukehren.
Editar: Mir ist gerade klar geworden, dass ich Ihre Frage nicht beantworte, denn was Sie wollten, war nicht ein Diff oder eine einfache Möglichkeit, die alte Version ganz oder teilweise wiederherzustellen, sondern einfach cat
diese Version.
Natürlich können Sie das auch nach dem Zurücksetzen der Datei mit tun:
git show :file.txt
zur Ausgabe auf der Standardausgabe oder
git show :file.txt > file_at_27cf8e8.txt
Aber wenn das alles war, was du wolltest, lief git show
direkt mit git show 27cf8e8:file.txt
wie von anderen vorgeschlagen, ist natürlich viel direkter.
Ich werde diese Antwort aber stehen lassen, weil das Laufen git show
ermöglicht es Ihnen, die alte Version sofort abzurufen, aber wenn Sie etwas damit machen wollen, ist es nicht annähernd so bequem, dies von dort aus zu tun, wie wenn Sie die Version im Index zurücksetzen.
111 Stimmen
Der Schlüssel dazu:
git show
verwendet (wenig hilfreich) eine andere Syntax mit einem Doppelpunkt.git show 2c7cf:my_file.txt
5 Stimmen
Zur weiteren Verdeutlichung: Mit dem obigen Befehl wird git aufgefordert, zwei separate Objekte anzuzeigen, eine Revision und eine Datei. Die akzeptierte Antwort unten, die einen Doppelpunkt zwischen den beiden Objekten verwendet, fragt nach einer bestimmten Datei in einer bestimmten Revision.
2 Stimmen
Unter *nix brauchen Sie kein PAGER, sondern nur eine Umleitung der Shell-Ausgabe mit
>
1 Stimmen
Mögliche Duplikate von Gibt es einen schnellen Git-Befehl, um eine alte Version einer Datei zu sehen?
0 Stimmen
Checat hat einen wichtigen Hinweis für diejenigen, die den Inhalt in eine Datei exportieren wollen. Sie brauchen etwas wie dieses: git show {sha}:my_file.txt > old_my_file.txt
0 Stimmen
Basierend auf dem Titel der Frage, dies scheint die richtige Antwort zu sein . Basierend auf dem restlichen Inhalt der Frage, diese Antwort am nützlichsten erscheint. Ich brauchte ein paar Minuten, um zu erkennen, dass die beiden ziemlich unterschiedlich scheinen, hoffentlich spart dieser Kommentar Zeit für andere.
0 Stimmen
@rbatt Nicht mehr ganz: das wäre (heute, 2019)
git restore
, nichtgit checkout
. Siehe meine bearbeitete Antwort .0 Stimmen
Wenn Sie eine Antwort auf die Frage suchen, wie Sie alle Dateien unter einem Unterverzeichnis in einer Git-Historienrevision abrufen können, lesen Sie dies: stackoverflow.com/a/62342847/94148