Wie kann ich eine bestimmte Version einer Datei in Git auschecken?

85

Wie kann ich eine bestimmte Version einer Datei in Git auschecken?

Ich habe diese Mail auf der Mailingliste gefunden , auf der stand:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

Aber ich verstehe nicht, wie ich 'HEAD ~ 43' herausfinden soll. Wenn ich a mache git log aFile, wie kann ich dann herausfinden, welchen 'HEAD ~ 43' ich verwenden soll?

Und warum muss ich git resetfür diese Datei laufen ? Was tut es?

n179911
quelle
"git reset <commit> <file>" macht genau das gleiche wie "git checkout <commit> <file>".
Jakub Narębski
2
Wenn es bei Ihrer Frage um die HEAD ~ 43-Syntax geht (dokumentiert in git-rev-parse), fragen Sie nach diesem Problem, nicht nach einem nicht verwandten, auf das Sie die Antwort kennen. "Was bedeutet HEAD ~ 45 und wie findet man eine bestimmte Version der Datei"
Jakub Narębski
gemäß lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/… und lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- reset.html , "git reset <commit> <file>" funktioniert nicht genau wie "git checkout <commit> <file>": "git reset <commit> <file>" setzt <file> im Index zurück von <commit>, ohne <file> im Arbeitsbaum zu berühren, aber "git checkout <commit> <file>" aktualisiert den Index für <file> von <commit> und aktualisiert dann <file> im Arbeitsbaum.
Yoda
2
Wenn eine der folgenden Antworten Ihre Frage so beantwortet , wie der Stapelüberlauf funktioniert, würden Sie die Antwort "akzeptieren", indem Sie auf das Häkchen daneben klicken. Details hier . Aber nur, wenn Ihre Frage beantwortet ist; Wenn nicht, sollten Sie der Frage und / oder den Kommentaren zu den Antworten weitere Details hinzufügen, aus denen hervorgeht, was (noch) nicht klar ist.
TJ Crowder

Antworten:

103

Sie wissen, zu welchem ​​Commit (dh zur spezifischen Revision) die Datei gehört? Dann mach:

git checkout <commit> <file>

Der andere Befehl:

git checkout HEAD~N <file>

Ist für den Fall, dass Sie eine Version der Datei aus einem Bereich zurück erhalten möchten (was ich für Nostalgie mache).

Fake Code Monkey Rashid
quelle
18

HEAD~43ist nur baumartig, also können Sie einen Hash oder ein Tag verwenden. Sie müssen treeish vom Dateinamen mit trennen --, andernfalls wird es als Dateiname behandelt. Beispielsweise.

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename
Dhill
quelle
2

HEAD~43bezieht sich auf das Commit (Version) der Datei. Stattdessen können Sie den Commit-Hash verwenden, den Sie git logfür die Datei erhalten. Wenn Sie nur die Datei möchten, müssen Sie sie nicht ausführen git reset. Dies ist nur erforderlich, wenn Sie die Datei auf den aktuellen HEAD weiterleiten möchten.

Jim Puls
quelle