Setzen Sie ein Git-Repository auf einen vorherigen Commit zurück
- Vorübergehendes Rollback zu einem vorherigen Commit
- Unveröffentlichte Commits löschen
- Veröffentlichte Commits rückgängig machen
Dieser Artikel beschreibt, wie Sie ein Git-Repository auf einen früheren Commit zurücksetzen können. Hier sind die drei Methoden, die wir behandeln werden.
- Vorübergehendes Rollback zu einem früheren Commit
- Löschen Sie unveröffentlichte Commits
- Veröffentlichte Commits rückgängig machen
Vorübergehendes Rollback zu einem vorherigen Commit
Unsere erste Methode beinhaltet die Verwendung des Befehls git checkout
.
Auf diese Weise können wir zu einem früheren Git-Commit zurückkehren, ohne den Commit-Verlauf in unserem Zweig neu zu schreiben. Hier ist ein Beispiel.
Angenommen, dies ist unser Commit-Verlauf, wie kommen wir zurück zu drei Commits? (z.B. HEAD~3
)
Wir können den Befehl git checkout
ausführen, wie unten dargestellt.
$ git checkout HEAD~3
Wie oben zu sehen, befinden wir uns derzeit im getrennten Modus. Wir können Änderungen vornehmen, experimentieren und die Änderungen übernehmen, ohne dass dies Auswirkungen auf Zweige hat.
Seien Sie im Modus abgetrennter KOPF
vorsichtig, da Sie die vorgenommenen Änderungen verlieren können. Um diese Änderungen beizubehalten, erstellen Sie einen neuen Zweig, wie unten gezeigt.
$ git checkout -b Detached
Sie können Ihre Filiale nach Belieben benennen.
Unveröffentlichte Commits löschen
Unveröffentlichte Änderungen sind einfach die Commits, die Sie noch nicht in das Remote-Repository übertragen haben.
Sie können die Commits löschen, um Ihr lokales Repository mit dem Befehl git reset
auf einen früheren Zustand zurückzusetzen. Hier ist ein Beispiel.
Was wäre, wenn wir die drei Commits, die wir im obigen Abschnitt besprochen haben, hart löschen wollten, anstatt vorübergehend zu wechseln? Wie würden wir vorgehen?
Wir führen den Befehl git reset
aus, um die drei Commits wie unten dargestellt endgültig zu löschen.
$ git reset --hard HEAD~3
Der obige Befehl beseitigt die drei Commits und alle nicht festgeschriebenen Änderungen. Stellen Sie sicher, dass Sie den Befehl git stash
ausführen, wenn Sie Ihre nicht festgeschriebenen Änderungen beibehalten möchten.
Beachten Sie, dass diese Methode nur verwendet werden sollte, wenn Sie Ihre Änderungen nicht in das Remote-Repository übertragen haben, insbesondere wenn es sich um ein gemeinsam genutztes Repository handelt.
Veröffentlichte Commits rückgängig machen
Im obigen Abschnitt haben wir gesehen, wie Sie unveröffentlichte Commits löschen können. Was ist, wenn Sie die Commits bereits in das Remote-Repository gepusht haben?
Der Befehl git reset --hard
ist destruktiv und kann die Zeitleiste Ihres Projekts durcheinanderbringen, wenn mehrere Entwickler an demselben Projekt arbeiten.
Der sicherste Weg, veröffentlichte Commits rückgängig zu machen, ist die Verwendung des Befehls git revert
. Dadurch wird der Commit-Verlauf nicht neu geschrieben, sondern zurückgesetzt und ein neuer Commit erstellt.
Dadurch wird es für andere Entwickler einfacher zu verstehen, was passiert.
Um die drei Commits rückgängig zu machen, führen wir Folgendes aus:
$ git revert --no-commit HEAD~3..HEAD
Das Flag --no-commit
ermöglicht es uns, eine Commit-Nachricht für alle drei rückgängig gemachten Commits zu erstellen. Wenn Sie das Flag nicht einschließen, müssen Sie für jede Übergabe eine Commit-Nachricht erstellen, die unordentlich aussieht und Ihr Repository unübersichtlich macht.
Kurz gesagt gibt es drei Möglichkeiten, zu einem früheren Commit in Git zurückzukehren. Es hängt alles von der Definition der Umkehrung in Ihrem Fall ab.
Wenn Sie vorübergehend zu einem früheren Commit wechseln möchten, verwenden Sie den Befehl git checkout
. Der Befehl git reset --hard
sollte für unveröffentlichte Änderungen reserviert werden, während der Befehl git revert
am besten für veröffentlichte Commits funktioniert.
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn