Verwendung von git show
Um Ihre eigene Antwort zu vervollständigen, lautet die Syntax in der Tat
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
Der Befehl nimmt die übliche Art der Überarbeitung an, d.h. Sie können eine der folgenden Möglichkeiten verwenden:
- Name der Niederlassung (als vorgeschlagen por Asche )
HEAD
+ x Anzahl von ^
Zeichen
- Der SHA1-Hash einer bestimmten Revision
- Die ersten paar (vielleicht 5) Zeichen eines gegebenen SHA1-Hashes
Tipp Es ist wichtig, daran zu denken, dass bei der Verwendung von " git show
", immer einen Pfad vom Stamm des Repositorys angeben und nicht Ihre aktuelle Verzeichnisposition.
(Obwohl Mike Morearty erwähnt, dass Sie zumindest mit git 1.7.5.4 einen relativen Pfad angeben können, indem Sie " ./
" am Anfang des Pfades. Zum Beispiel:
git show HEAD^^:./test.py
)
Verwendung von git restore
Mit Git 2.23+ (August 2019) können Sie auch git restore
die ersetzt das Verwirrende git checkout
commande
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
Das würde im Arbeitsbaum nur die Datei wiederherstellen, wie sie in der "Quelle" ( -s
) SHA1 übertragen oder verzweigen somebranch
.
Um auch den Index wiederherzustellen:
git restore -s <SHA1> -SW -- afile
( -SW
: kurz für --staged --worktree
)
Wie bereits in die Kommentare por starwarswii
Damit können Sie den Inhalt in eine Datei puffern, was besonders praktisch ist, wenn Sie Dateien aus einer Übertragung schnell vergleichen wollen.
Z.B. können Sie tun:
git show 1234:path/to/file.txt > new.txt
git show 1234~:path/to/file.txt > old.txt
und vergleichen sie dann.
Git-Befehle auf niedriger Ebene verwenden
Vor git1.5.x wurde dies mit Hilfe von Klempnerarbeiten erledigt:
git ls-tree <rev>
eine Liste von einem oder mehreren 'Blob'-Objekten innerhalb einer Übertragung anzeigen
git cat-file blob <file-SHA1>
cat eine Datei, wie sie innerhalb einer bestimmten Revision übertragen wurde (ähnlich wie svn cat). verwenden git ls-tree
um den Wert einer bestimmten Datei-sha1 abzurufen
git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
git-ls-tree
listet die Objekt-ID für $file
in Überarbeitung $REV
wird dies aus der Ausgabe herausgeschnitten und als Argument für git-cat-file
die eigentlich heißen müsste git-cat-object
und übergibt dieses Objekt einfach an stdout
.
Hinweis: Seit Git 2.11 (Q4 2016) können Sie einen Inhaltsfilter auf die git cat-file
Ausgabe.
Siehe Commit 3214594 , 7bcf341 übertragen (09. September 2016), 7bcf341 übertragen (09. September 2016), und Übergabe b9e62f6 , Commit 16dcc29 (24 Aug 2016) von Johannes Schindelin ( dscho
) .
(Zusammengefasst von Junio C. Hamano -- gitster
-- in 7889ed2 übertragen , 21. September 2016)
git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch
Anmerkung: " git cat-file --textconv
"Kürzlich (2017) traten Segfehler auf, die in Git 2.15 (Q4 2017) behoben wurden.
Voir cc0ea7c übertragen (21. September 2017) von Jeff King ( peff
) .
(Zusammengefasst von Junio C. Hamano -- gitster
-- in bfbc2fc übertragen , 28. September 2017)
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