17. Entfernen eines Commits aus einem Zweig
Ziele
- Erfahren Sie, wie Sie die neuesten Commits des Zweigs löschen
Revert
ist ein leistungsstarker Befehl des vorherigen Abschnitts, mit dem Sie alle Commits für das Repository abbrechen können. Im Verlauf werden jedoch sowohl ursprüngliche als auch abgebrochene Commits angezeigt des Zweigs (bei Verwendung des Befehls git log
).
Oft stellen wir nach dem Festschreiben fest, dass es sich um einen Fehler handelt. Es wäre schön, einen zu haben Rückgängig-Befehl, mit dem die falschen Festschreibungen sofort gelöscht werden können. Dieser Befehl würde das Auftreten eines oder mehrerer unerwünschter Festschreibungen in der git log
-Historie verhindern.
01 Der Befehl zum Zurücksetzen
Wir haben bereits den Befehl reset
verwendet, um die Pufferzone und das ausgewählte Commit abzugleichen (HEAD-Commit wurde in der vorherigen Lektion verwendet).
Wenn eine Festschreibungsreferenz angegeben wird (dh ein Zweig, ein Hash oder ein Tag-Name), wird die reset
… …
- Überschreibt den aktuellen Zweig, sodass er auf das richtige Commit verweist.
- Setzen Sie die Pufferzone optional zurück, damit sie dem angegebenen Commit
- Setzen Sie das Arbeitsverzeichnis optional zurück, damit es mit dem angegebenen Commit übereinstimmt.
02 Überprüfen Sie unseren Verlauf
Lassen Sie uns einen kurzen Scan unseres Festschreibungsverlaufs durchführen
Ausführen:
git hist
Ergebnis:
Wir sehen, dass die letzten beiden Commits in diesem Zweig „Ups“ sind „und“ Ups zurücksetzen „. Entfernen wir sie mit dem Befehl reset
.
03 Markieren Sie diesen Zweig zuerst
Markieren Sie das letzte Commit mit tag, so you can find it after removing a commit(s).
Ausführen:
git tag oops
04 Commit auf vorherige Ups zurücksetzen
In Im obigen Verlaufsprotokoll steht das mit „v1“ gekennzeichnete Commit vor den Commits „Oops“ und „Overt zurücksetzen“. Lassen Sie uns den Zweig auf diesen Punkt zurücksetzen. Da der Zweig ein Tag hat, können wir den Tag-Namen im Reset-Befehl verwenden (wenn er kein Tag hat, können wir den Hash-Wert verwenden).
Ausführen:
git reset --hard v1git hist
Ergebnis:
Unser Hauptzweig zeigt auf Commit v1, und die Commits „Revert Oops“ und „Oops“ sind im Zweig nicht mehr vorhanden. Mit dem Parameter --hard
spiegelt das Arbeitsverzeichnis den neuen Verzweigungskopf wider.
05 Es geht nie etwas verloren
Was ist mit den falschen Commits passiert? Sie befinden sich noch im Repository. Eigentlich können wir uns noch auf sie beziehen. Zu Beginn der Lektion haben wir das „oops“ -Tag für das abgebrochene Commit erstellt. Schauen wir uns alle Commits an.
Ausführen:
git hist --all
Ergebnis:
Das können wir sehen Die falschen Commits sind nicht weg. Sie werden nicht mehr im Hauptzweig aufgelistet, verbleiben aber weiterhin im Repository. Sie wären immer noch im Repository, wenn wir sie nicht markieren würden, aber dann könnten wir sie nur anhand ihrer Hash-Namen referenzieren. Nicht referenzierte Commits verbleiben im Repository, bis die Garbage Collection-Software vom System ausgeführt wird.
06 Gefahren zurücksetzen
Zurücksetzen auf lokale Zweige ist normalerweise harmlos. Die Folgen eines „Unfalls“ können mithilfe des richtigen Commits rückgängig gemacht werden.
Andere Benutzer, die den Zweig gemeinsam nutzen, können jedoch verwirrt sein, wenn der Zweig in Remote-Repositorys gemeinsam genutzt wird.