Wie setze ich das Arbeitsverzeichnis auf einen älteren Commit?

Lesezeit: 3 Minuten

Benutzer-Avatar
Dänisch

Um herauszufinden, an welchem ​​Punkt ich ein Feature in meiner Software beschädigt habe, muss ich ältere Versionen meines Repositorys überprüfen. Ich möchte nur das Arbeitsverzeichnis auf einen älteren Commit setzen, mit dem Code spielen, danach die Änderungen verwerfen und dann einen anderen Commit versuchen.

Ich möchte nichts an Commits ändern, weder entfernen noch erstellen. Ich habe versucht, mit git reset aber danach wurden neuere Commits nicht mehr angezeigt. Also habe ich das Repository erneut heruntergeladen, weil ich nicht wusste, wie ich das rückgängig machen kann.

Benutzer-Avatar
VonC

Eine einfache git checkout old-sha1 kann ein Anfang sein, aber der eigentliche Befehl für diese Art von Aufgabe lautet:

git bisect.

Finden Sie durch binäre Suche die Änderung, die einen Fehler eingeführt hat

Wenn Sie ein Skript haben, das testen kann, ob Ihr Arbeitsbaum “funktioniert” oder nicht, können Sie dieses Skript bei früheren Commits ausführen git bisectum den ersten Commit zu finden, der Ihren Test bricht.

Beachten Sie, dass dieser Befehl noch nicht direkt von GitHub für Windows unterstützt wird: Sie müssen eine Shell öffnen.


EIN git checkout würde Sie in einem abgetrennten HEAD belassen, was keine Rolle spielt, da Sie keine Änderungen vornehmen.
Um dorthin zurückzukehren, wo Sie waren, checken Sie eine Filiale aus:

git checkout master

Siehe “Warum hat Git meinen Kopf abgenommen?”.

  • Danke, dachte ich checkout ist nur für Filialen vor. Welche Art von Skript könnte ich verwenden? bisect? Meine Anwendung ist in nativem C++ geschrieben. Übrigens bin ich von Git beeindruckt, einen solchen Befehl aufzunehmen.

    – Dänisch

    14. Mai 2013 um 9:43 Uhr


  • @danijar nein, du kannst jedes Treeish auschecken. Zum Beispiel, git checkout "@{10 minutes ago}" würde Ihnen die Zusage von vor 10 Minuten geben.

    – VonC

    14. Mai 2013 um 9:45 Uhr

  • @danijar für git bisect, jedes gewünschte Skript, solange es mit dem Status 0 (funktioniert) oder 1 (fehlgeschlagen) beendet wird.

    – VonC

    14. Mai 2013 um 9:45 Uhr

  • ich benutzte checkout und Git sagte mir, ich befinde mich jetzt im Zustand “getrennter Kopf”. Was bedeutet das? Wie komme ich zurück zum neusten Commit?

    – Dänisch

    14. Mai 2013 um 9:56 Uhr

  • @danijar Ich habe die Antwort bearbeitet, um den Aspekt des abgetrennten Kopfes anzusprechen.

    – VonC

    14. Mai 2013 um 10:27 Uhr

Benutzer-Avatar
Hand

Sie können den Code in einem anderen Zweig zum Index auschecken, indem Sie Folgendes verwenden:

git checkout my-other-branch .

Der Punkt ist ein Pfadbezeichner, der angibt, dass Sie dies für das gesamte Repository tun möchten. Sie könnten auch nur einen bestimmten Ordner angeben. Technisch gesehen können Sie jeden ‘baumartigen’ Bezeichner für angeben my-other-branch Parameter, wie ein Tag, ein Commit-Hash, so etwas wie HEAD~1ect … Wenn Sie möchten, dass diese Änderungen nicht bereitgestellt werden, können Sie Folgendes tun:

git reset HEAD

Angenommen, Sie haben in einem sauberen Zustand begonnen, befindet sich Ihr Arbeitsverzeichnis jetzt im selben Zustand wie my-other-branch.

  • Dieser hat bei mir funktioniert. Ohne Punktbezeichner wurden Dateien im Arbeitsverzeichnis nicht wiederhergestellt.

    – dess

    15. April 2021 um 15:59 Uhr

Verwenden git checkout <branch_name> Sie können in die andere verfügbare Filiale wechseln. Wenn Sie Ihre zurücksetzen möchten HEAD zum älteren Commit können Sie den folgenden Befehl ausprobieren:

  • git reset –hard HEAD~1 um den HEAD zurückzusetzen ein einziges Commit
  • git reset –hard HEAD~2 um den HEAD zurückzusetzen 2 Zusagen usw

Auch wenn Sie das Commit haben, können Sie diesen Befehl ausprobieren: git reset --hard <commit>
Auf diese Weise können Sie das Arbeitsverzeichnis auf ein älteres Commit setzen.

Um die Änderungen vollständig zu verwerfen, können Sie Folgendes versuchen: git reset --hard wodurch Ihr Verzeichnis auf den vorherigen Commit bereinigt wird.

1188020cookie-checkWie setze ich das Arbeitsverzeichnis auf einen älteren Commit?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy