Wie kann ich zu einem bestimmten Commit in Git zurückkehren ?
Die beste Antwort, die mir jemand geben konnte, war, git revert
X-mal zu verwenden, bis ich das gewünschte Commit erreicht habe.
Nehmen wir also an, ich möchte zu einem Commit zurückkehren, das 20 Commits alt ist. Ich müsste es 20 Mal ausführen.
Gibt es einen einfacheren Weg, dies zu tun?
Ich kann Reset nicht verwenden, da dieses Repository öffentlich ist.
git
git-checkout
git-revert
David
quelle
quelle
Antworten:
Versuche dies:
Wo
[revision]
ist der Commit-Hash (zum Beispiel :)12345678901234567890123456789012345678ab
.Vergiss das
.
am Ende nicht, sehr wichtig. Dadurch werden Änderungen auf den gesamten Baum angewendet. Sie sollten diesen Befehl im Git-Projektstamm ausführen. Wenn Sie sich in einem Unterverzeichnis befinden, ändert dieser Befehl nur die Dateien im aktuellen Verzeichnis. Dann verpflichten Sie sich und Sie sollten gut sein.Sie können dies rückgängig machen, indem Sie
Dadurch werden alle Änderungen aus dem Arbeitsverzeichnis und dem Staging-Bereich gelöscht.
quelle
So führen Sie ein Rollback auf ein bestimmtes Commit durch:
So rollen Sie 10 Commits zurück:
Sie können "git revert" wie im folgenden Beitrag verwenden, wenn Sie den Verlauf nicht neu schreiben möchten
Wie kann ich das Git-Repository auf ein vorheriges Commit zurücksetzen?
quelle
Nun, ich denke die Frage ist, was meinst du mit "Rollback"? Wenn Sie dies nicht können,
reset
weil es öffentlich ist und Sie den Commit-Verlauf beibehalten möchten, möchten Sie dann nur, dass Ihre Arbeitskopie ein bestimmtes Commit widerspiegelt? Verwenden Siegit checkout
und den Commit-Hash.Bearbeiten: Wie in den Kommentaren erwähnt, werden
git checkout
Sie bei Verwendung ohne Angabe eines Zweigs in den Status "Kein Zweig" versetzt. Verwenden Siegit checkout <commit> -b <branchname>
diese Option, um in einen Zweig odergit checkout <commit> .
in den aktuellen Zweig auszuchecken.quelle
git checkout
- er kann in jede Filiale (aktuell oder neu) einchecken, die er wünscht. Ich werde meine Antwort aktualisieren, damit sie nicht mehrdeutig ist.git reset
diese Dateien löschen, was Sie nicht möchten. Versuchen Sie es in einem separaten Zweig:git checkout <commit> -b <branchname>
Sie werden keine stagnierenden Dateien in diesem Zweig haben .checkout
ist, dass keine Dateien gelöscht werden, die in einem vorherigen Commit hinzugefügt wurden.Das Originalplakat besagt:
Es ist nicht notwendig,
git revert
X-mal zu verwenden.git revert
kann einen Festschreibungsbereich als Argument akzeptieren, sodass Sie ihn nur einmal verwenden müssen, um einen Bereich von Festschreibungen zurückzusetzen. Wenn Sie beispielsweise die letzten 20 Commits zurücksetzen möchten:Die Commit Bereich
HEAD~20..
kurz ist fürHEAD~20..HEAD
und Mittel „starten vom 20 - ten Elternteil des HEAD begehen, und kehrt alle Commits , nachdem es auf HEAD up“.Dadurch werden die letzten 20 Commits zurückgesetzt, vorausgesetzt, es handelt sich bei keinem dieser Commits um Merge-Commits. Wenn es Merge-Commits gibt, können Sie nicht alle in einem Befehl zurücksetzen. Sie müssen sie einzeln mit zurücksetzen
Beachten Sie auch, dass ich mit einem Bereich mit
git revert
Git Version 1.9.0 getestet habe. Wenn Sie eine ältere Version von git verwenden,git revert
funktioniert die Verwendung eines Bereichs mit möglicherweise oder möglicherweise nicht.In diesem Fall
git revert
wird gegenüber bevorzugtgit checkout
.Beachten Sie, dass im Gegensatz zu dieser Antwort, die besagt, dass verwendet werden soll
git checkout
,git revert
tatsächlich alle Dateien entfernt werden, die in einem der Commits hinzugefügt wurden, die Sie zurücksetzen . Dies ist die richtige Methode, um eine Reihe von Revisionen zurückzusetzen.Dokumentation
quelle
Schritt 1: Liste der Commits abrufen:
Sie erhalten eine Liste wie in diesem Beispiel:
Schritt 2: Kopieren Sie den erforderlichen Commit-Hash und fügen Sie ihn zum Auschecken ein:
Das ist alles.
quelle
werde es tun. Es ist "Git Checkout", aber ohne HEAD zu aktualisieren.
Sie können den gleichen Effekt mit erzielen
Wenn Sie es vorziehen, Komfortbefehle miteinander zu verbinden.
Diese lassen Sie mit Ihrem Arbeitsbaum und Index im gewünschten Zustand, Sie können nur
git commit
zum Abschluss.quelle
Willst du HEAD Detached Mode?
Wenn Sie die X-Zeit mit einem DETACHED HEAD auf ein bestimmtes Commit zurücksetzen möchten (was bedeutet, dass Sie nichts durcheinander bringen können), verwenden Sie auf jeden Fall Folgendes:
(Ersetzen Sie X durch die Anzahl der Commits, die Sie zurückgehen möchten.)
IE, um ein Commit zurück zu gehen:
quelle
Angenommen, Sie arbeiten an einem Projekt und nach einem Tag oder so. Sie bemerken, dass eine Funktion immer noch Fehler liefert. Sie wissen jedoch nicht, welche Änderung Sie vorgenommen haben, die den Fehler verursacht hat. Sie müssen also frühere Arbeitseinsätze fischen. So kehren Sie zu einem bestimmten Commit zurück:
Ok, das Commit funktioniert also für Sie. Kein Fehler mehr. Sie haben das Problem festgestellt. Jetzt können Sie zum letzten Commit zurückkehren:
Und checken Sie eine bestimmte Datei aus, bevor sie den Fehler verursacht hat (in meinem Fall verwende ich das Beispiel Gemfile.lock):
Auf diese Weise können Sie Fehler behandeln, die Sie in Commits erstellt haben, ohne die Fehler erst später zu bemerken.
quelle
Die Commit-ID für jedes Commit finden Sie im Abschnitt Commits von GitHub / BitBucket / Gitlab. Angenommen, Ihre Festschreibungs- ID lautet 5889575. Wenn Sie zu diesem Teil in Ihrem Code zurückkehren möchten, müssen Sie lediglich Folgendes eingeben
Dies bringt Sie zu diesem Zeitpunkt in Ihrem Code.
quelle
Ich bin nicht sicher, was sich geändert hat, aber ich kann ein bestimmtes Commit ohne diese Option nicht auschecken
--detach
. Der vollständige Befehl, der für mich funktionierte, war:git checkout --detach [commit hash]
Um aus dem getrennten Zustand zurückzukehren, musste ich meine lokale Niederlassung auschecken:
git checkout master
quelle
master
behebt das Problem, während der Arbeit getrennt zu bleibengit reset --hard
odergit checkout -- .
zu arbeiten, aber getrennt zuHier ist ein Beispiel dafür
quelle