1959 Stimmen

Wie kann ich eine alte Version einer Datei mit Git anzeigen?

Gibt es einen Befehl in Git, um zu sehen (entweder als Dump in stdout, oder in $PAGER o $EDITOR ) eine bestimmte Version einer bestimmten Datei?

3 Stimmen

Wenn Sie zu dieser Frage gekommen sind, weil Sie eine ältere Version einer Binärdatei (z.B. eines Bildes) überprüfen wollen, dann ist es besser, einen Checkout in den alten Commit zu machen, zu sehen, was Sie sehen müssen, und dann zum HEAD zurückzukehren. Dazu machen Sie git checkout <sha1-of-the-commit-you-need> , danach, git checkout HEAD

2241voto

mipadi Punkte 377834

Sie können verwenden git show mit einem Pfad von der Wurzel des Repositorys ( ./ o ../ für relative Pfadangaben):

$ git show REVISION:path/to/file

Ersetzen Sie REVISION mit Ihrer aktuellen Revision (kann ein Git Commit SHA, ein Tag-Name, ein Branch-Name, ein relativer Commit-Name oder eine andere Art der Identifizierung eines Commits in Git sein)

Um zum Beispiel die Version einer Datei anzuzeigen <repository-root>/src/main.c von vor 4 Übertragungen, verwenden:

$ git show HEAD~4:src/main.c

Git für Windows erfordert Schrägstriche auch in Pfaden relativ zum aktuellen Verzeichnis. Weitere Informationen finden Sie in der Manpage für git-show .

6 Stimmen

Das scheint nicht wirklich zu funktionieren - haben Sie es versucht? Bei "git show HEAD:path/to/file.c" erhalte ich eine Fehlermeldung mit einem "zweideutigen Argument".

0 Stimmen

Und wenn ich einfach "git-show path/to/file.c" ausführe, wird der Befehl erfolgreich ausgeführt, ohne dass eine Ausgabe erfolgt.

0 Stimmen

Mit welcher Version von git? Die andere Möglichkeit ist mit git cat-file unter Angabe der Blob-ID (die Sie mit ls-tree finden können, aber das ist der harte Weg).

302voto

Jim Hunziker Punkte 12726

Nach Datum aufgeschlüsselt sieht das folgendermaßen aus wenn die Übergabe innerhalb der letzten 90 Tage erfolgte :

git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt

Beachten Sie, dass HEAD@{2013-02-25} bedeutet "wo HEAD am 2013-02-25 war" in diesem Repository (mit der Reflog ), nicht "die letzte Übertragung vor dem 25.02.2013 in diesem Zweig in der Geschichte".

Dies ist wichtig! Es bedeutet, dass diese Methode standardmäßig nur für den Verlauf der letzten 90 Tage funktioniert. Andernfalls müssen Sie dies tun:

git show $(git rev-list -1 --before="2013-02-26" HEAD):./fileInCurrentDirectory.txt

5 Stimmen

Dieser Befehl ist nützlich bei master anstelle von HEAD@{2013-02-25} wenn Sie in einer Filiale sind

1 Stimmen

Können Sie die Zeit mit angeben, à la git log --since='2016-04-28 23:59:59 +0100' ?

15 Stimmen

Die Tatsache, dass diese Syntax das reflog verwendet, ist wichtig und sollte besonders hervorgehoben werden, denn das Reflog enthält nicht alle Übertragungen . Siehe blog.endpoint.com/2014/05/git-checkout-am-spezifischen-datum.html

132voto

Wenn Sie GUIs mögen, können Sie gitk verwenden:

  1. gitk starten mit:

    gitk /path/to/file
  2. Wählen Sie die Revision im oberen Teil des Bildschirms aus, z. B. nach Beschreibung oder Datum. Im unteren Teil des Bildschirms wird standardmäßig das Diff für diese Revision angezeigt (entsprechend der Optionsschaltfläche "Patch").

  3. Um die Datei für die ausgewählte Revision zu sehen:

    • Klicken Sie auf das Optionsfeld "Baum". Dadurch wird die Wurzel des Dateibaums in dieser Revision angezeigt.
    • Gehen Sie zu Ihrer Datei zurück.

1 Stimmen

@Paul Slocum: Kann sein, weil dieser Befehl kein konventioneller Befehl ist, nicht der in git eingebaute. Ich glaube, dieser Befehl funktioniert nur unter Windows.

0 Stimmen

Beachten Sie, dass dies nur zu funktionieren scheint, wenn Sie vom Stammverzeichnis Ihres Git-Repositorys aus starten.

0 Stimmen

Wenn Sie mit gitk gegen eine bestimmte Revision prüfen wollen, können Sie auch diese Abkürzung verwenden: gitk REVISION /path/to/file . Dies kann nützlich sein, wenn Sie z. B. eine bestimmte Version überprüfen wollen.

115voto

Adrien Be Punkte 18445

Sie können auch eine commit hash (oft auch als commit ID ) mit dem git show Befehl .


Kurz und bündig

git show <commitHash>:/path/to/file


Schritt für Schritt

  1. Anzeigen des Protokolls aller Änderungen für eine bestimmte Datei mit git log /path/to/file
  2. In der angezeigten Liste der Änderungen werden die commit hash comme commit 06c98... (06c98... ist der Commit-Hash)
  3. Kopieren Sie die commit hash
  4. Führen Sie den Befehl git show <commitHash>:/path/to/file unter Verwendung der commit hash von Schritt 3 & die path/to/file von Schritt 1.

Anmerkung: Hinzufügen der ./ wenn die Angabe eines relativen Pfades wichtig erscheint, d.h. git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html .

0 Stimmen

Dieser befehl op - vervollständigt sich sogar automatisch aus dem speicher - getestet an einem gelöschten verzeichnis... mehr op als das geht nicht gg

0 Stimmen

In debian der Zusatz von ./ spielt für das Pathing keine Rolle.

55voto

sachin_ur Punkte 1726

Um schnell die Unterschiede zu älteren Revisionen einer Datei zu sehen:

git show -1 filename.txt > zum Vergleich mit der letzten Revision der Datei

git show -2 filename.txt > zum Vergleich mit der 2. letzten Revision

git show -3 fielname.txt > zum Vergleich mit der letzten 3. letzten Revision

25 Stimmen

Diese Befehle zeigen mir die Unterschiede zur aktuellen Version, aber nicht die gesamte Datei.

3 Stimmen

Es ist wichtig zu beachten, dass diese Antwort mit der Frage " Wie kann man Unterschiede zu einer bestimmten Datei in den letzten Übertragungen anzeigen? " anstelle von " Wie kann ich eine alte Version einer Datei mit Git anzeigen? ", lautet die ursprüngliche Frage.

0 Stimmen

Der Unterschied liegt in den : - Doppelter Doppelpunkt - zwischen Commit-Hash und Datei erwähnen die Kommentatoren die gesamte Datei und diff zu einer anderen älteren Version.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X