Gehen Sie zu einer bestimmten Revision

582

Ich habe ein Git-Repository eines bestimmten Projekts geklont. Kann ich die Dateien in den Ausgangszustand versetzen und wenn ich sie überprüfe, gehe ich zu Revision 2, 3, 4 ... zuletzt? Ich möchte einen Überblick über die Entwicklung des Projekts haben.

xralf
quelle

Antworten:

874

Verwenden Sie git checkout <sha1>diese Option, um ein bestimmtes Commit auszuchecken.

Marcelo Cantos
quelle
2
Sie können dies tun git log -n1. Aber wenn git checkoutes nicht fehlschlägt, ist es eine Verschwendung von Mühe.
Marcelo Cantos
2
Es klappt. Ich musste full sha1 (nicht partiell) verwenden. Und wenn ich das Projekt einer zweiten Überarbeitung unterziehen möchte? git logZeigt jetzt nur das erste Commit an. Kann ich den sha1 des nächsten Commits herausfinden?
Xralf
6
Sie sollten nur genug von sha1 verwenden müssen, um die Einzigartigkeit zu gewährleisten. Vielleicht hatten Sie einen unglücklichen Zufall. Git hat kein Konzept für das "nächste" Commit. Die Geschichte ist eine DAG, bei der alle Pfeile nach hinten zeigen. Sie sollten git log --onelinedie Ausgabe ausführen und als Referenz in eine Textdatei einfügen (die abgekürzten sha1-Summen sind garantiert eindeutig). Eine andere Möglichkeit, wenn Ihr Verlauf linear ist, besteht darin, herauszufinden, wie viele Commits es vom ersten Commit bis zur masterVerwendung gibt git checkout master~543(wenn es 543 Commits gibt) git checkout master~542usw.
Marcelo Cantos
20
und wie kann ich von "git checkout <sha1>" zum aktuellen Commit zurückkehren?
ス レ ッ. ス
6
@AlexanderSupertramp Kasse der Filiale.
Marcelo Cantos
50

Um zu einer bestimmten Version / einem bestimmten Commit zu gelangen, führen Sie die folgenden Befehle aus. HASH-CODE können Sie von bekommengit log --oneline -n 10

git reset --hard HASH-CODE

Hinweis - Nach dem Zurücksetzen auf eine bestimmte Version / ein bestimmtes Commit können Sie ausführen git pull --rebase, wenn Sie alle verworfenen Commits zurückbringen möchten.

J4cK
quelle
1
Beachten Sie, dass a resetnicht nur einen bestimmten Punkt in der Grafik auscheckt, sondern auch Ihren aktuell ausgecheckten Zweig verschiebt
Liam
Außerdem resetwerden alle ausstehenden Änderungen verworfen.
WilliamKF
2
--hard flag löscht alle Commits nach dem besagten Hash .... möchte wahrscheinlich das kleine Leckerbissen hier hinzufügen. Ich bin sicher, die Leute haben die Geschichte verloren und sich gefragt, warum.
Urasquirrel
git pull --rebasefunktioniert nur, wenn Sie eine Fernbedienung für Ihr Repo haben und diese auf dem neuesten Stand ist.
Keith Thompson
19

Sie können eine grafische Ansicht des Projektverlaufs mit Tools wie erhalten gitk. Renn einfach:

gitk --all

Wenn Sie einen bestimmten Zweig auschecken möchten:

git checkout <branch name>

Verwenden Sie für ein bestimmtes Commit den SHA1-Hash anstelle des Zweignamens. ( Weitere Optionen für die Navigation in Ihrem Baum finden Sie unter Treeishes im Git Community Book , das gut gelesen werden kann.)

git log bietet eine ganze Reihe von Optionen, um auch einen detaillierten oder zusammenfassenden Verlauf anzuzeigen.

Ich kenne keinen einfachen Weg, um in einer Commit-Geschichte voranzukommen . Projekte mit einer linearen Geschichte sind wahrscheinlich nicht allzu häufig. Die Idee einer "Revision" wie bei SVN oder CVS lässt sich in Git nicht so gut abbilden.

Matte
quelle
2
Seien Sie sich bewusst: Git wird Sie nicht anlügen, wenn Sie eine einzige lineare Historie des Projekts erhalten. Es sei denn, das Projekt hat sich tatsächlich so entwickelt.
Andres Jaan Tack
Das Vorwärtsbewegen ist logisch bedeutungslos (selbst in einer linearen Historie), da ein Commit keinen Bezug zur "Zukunft" hat. Bestenfalls können Sie alle Commits identifizieren, bei denen das betreffende Commit als übergeordnetes Element vorliegt. Allerdings ist es aufgrund von Zusammenführungen auch keine triviale Übung, sich rückwärts zu bewegen.
Marcelo Cantos
5

Mit dem SHA1-Schlüssel eines Commits können Sie Folgendes tun:

  • Suchen Sie zunächst das gewünschte Commit für eine bestimmte Datei:

    git log -n <# commits> <file-name>

    Dies <# commits>generiert basierend auf Ihrer Liste eine Liste von Commits für eine bestimmte Datei.

    TIPP: Wenn Sie nicht sicher sind, nach welchem ​​Commit Sie suchen, können Sie dies mit dem folgenden Befehl herausfinden : git diff <commit-SHA1>..HEAD <file-name>. Dieser Befehl zeigt den Unterschied zwischen der aktuellen Version eines Commits und einer früheren Version eines Commits für eine bestimmte Datei.

    HINWEIS: Der SHA1-Schlüssel eines Commits ist in der git log -nListe wie folgt formatiert :

verpflichten <SHA1 id>

  • Zweitens überprüfen Sie die gewünschte Version:

    Wenn Sie das gewünschte Commit / die gewünschte Version gefunden haben, verwenden Sie einfach den folgenden Befehl: git checkout <desired-SHA1> <file-name>

    Dadurch wird die Version der von Ihnen angegebenen Datei im Staging-Bereich abgelegt. Um es aus dem Staging-Bereich zu entfernen, verwenden Sie einfach den folgenden Befehl:reset HEAD <file-name>

Verwenden Sie einfach den folgenden Befehl, um zu dem Punkt zurückzukehren, auf den das Remote-Repository verweist: git checkout HEAD <file-name>

Magier
quelle
2

Ich war in einer Situation, in der wir einen Hauptzweig haben, und dann einen anderen Zweig namens 17.0, und in diesem 17.0 gab es einen Commit-Hash ohne "XYZ" . Und der Kunde erhält bis zu dieser XYZ-Revision einen Build. Jetzt sind wir auf einen Fehler gestoßen, der für diesen Kunden behoben werden muss. Wir müssen also bis zu diesem "xyz" -Hash eine separate Filiale für diesen Kunden erstellen. Also hier ist, wie ich es gemacht habe.

Zuerst habe ich auf meinem lokalen Computer einen Ordner mit diesem Kundennamen erstellt. Angenommen, der Kundenname lautet "AAA", sobald dieser Ordner erstellt wurde. Führen Sie den folgenden Befehl in diesem Ordner aus:

  1. git init
  2. Git-Klon Nach diesem Befehl befinden Sie sich im Hauptzweig. Wechseln Sie also zum gewünschten Zweig
  3. git checkout 17.0 Damit gelangen Sie zu dem Zweig, in dem Ihr Commit vorhanden ist
  4. git checkout Dies wird Ihr Repository bis zu diesem Hash-Commit dauern. Sehen Sie sich den Namen Ihres Zweigs an, der in diesen Commit-Hash geändert wurde. Geben Sie diesem Hash nun einen Zweignamen
  5. Git-Zweig ABC Hiermit wird ein neuer Zweig auf Ihrem lokalen Computer erstellt.
  6. Git Checkout ABC
  7. Git Push Origin ABC Hiermit wird dieser Zweig in das Remote-Repository verschoben und ein Zweig auf dem Git-Server erstellt. Du bist fertig.
aschfahl
quelle
1

Eine Möglichkeit wäre, alle Commits zu erstellen, die jemals für Patches vorgenommen wurden. Überprüfen Sie das anfängliche Commit und wenden Sie die Patches nach dem Lesen in der richtigen Reihenfolge an.

verwenden git format-patch <initial revision>und dann git checkout <initial revision>. Sie sollten einen Stapel Dateien in Ihrem Director erhalten, beginnend mit vier Ziffern, die die Patches sind.

Wenn Sie mit dem Lesen Ihrer Revision fertig sind, tun Sie einfach, git apply <filename>was aussehen git apply 0001-*und zählen sollte.

Aber ich frage mich wirklich, warum Sie nicht stattdessen nur die Patches selbst lesen möchten. Bitte poste dies in deinen Kommentaren, weil ich neugierig bin.

Das Git-Handbuch gibt mir auch Folgendes:

git show next~10:Documentation/README

Zeigt den Inhalt der Datei Documentation / README an, wie er beim 10. letzten Commit des nächsten Zweigs aktuell war.

Sie können sich auch ansehen, git blame filenamewo Sie eine Liste finden, in der jede Zeile einem Commit-Hash + Autor zugeordnet ist.

Alex
quelle
1

Um zu einem bestimmten festgeschriebenen Code zu gelangen, benötigen Sie den Hash-Code dieses Festschreibens. Sie können diesen Hash-Code auf zwei Arten erhalten:

  1. Holen Sie es sich von Ihrem Github / Gitlab / Bitbucket-Konto. (Es befindet sich auf Ihrer Commit-URL, dh: github.com/user/my_project/commit/ commit_hash_code ), oder Sie können
  2. git logund überprüfen Sie Ihre letzten Commits in diesem Zweig. Es zeigt Ihnen den Hash-Code Ihres Commits und die Nachricht, die Sie beim Festschreiben Ihres Codes hinterlassen haben. Einfach kopieren und dann machengit checkout commit_hash_code

Wenn Sie nach dem Wechseln zu diesem Code daran arbeiten und Änderungen vornehmen möchten, sollten Sie einen weiteren Zweig mit git checkout -b <new-branch-name>erstellen, da sonst die Änderungen nicht beibehalten werden.

Ianiv Hojman
quelle
0

Um ein Commit auszuchecken (nb Sie schauen in die Vergangenheit!).

  • Git Checkout "commmitHash"

Um von einem Commit brutal neu zu starten und die späteren Zweige zu löschen, die Sie wahrscheinlich durcheinander gebracht haben.

  • git reset --hard "commmitHash"
Jeremy
quelle