Einführung

Beschreibung
Anstelle traditioneller „Undo“-Systeme hat Git sein eigenes System mit völlig anderer Terminologie, zu der Begriffe wie git clean, git rm, git reset und so weiter gehören. Jeder dieser Befehle hat bestimmte Funktionen und wird verwendet, um Änderungen in lokalen und öffentlichen Repositories rückgängig zu machen.
Alte Commits überprüfen
Nachdem eine Projektgeschichte erstellt wurde, ist es möglich, alle Commits in der Historie zu überprüfen. Das beste Werkzeug zum Überprüfen alter Commits ist git log. Jeder Commit hat seinen identifizierenden Hash, der verwendet wird, um Commits erneut aufzurufen.
Einführung
git log --oneline
a3b2a21ad Crossword solver with Vue.js
c54ce0237 New logic for crossword game
3acb8d0de Some changes in crossword logic
de32112e3 Styling crossword table areaStandardmäßig zeigt git log nur die Commits des ausgewählten Branches an. Um alle Commits über alle Branches hinweg anzuzeigen, führen Sie den Befehl git log --all aus. Verwenden Sie git checkout oder git switch, um andere Branches aufzurufen.
Alte Revisionen anzeigen
Wenn Sie den Zustand des Projekts anzeigen möchten, bevor Sie ein neues Experiment beginnen, müssen Sie zunächst den identifizierenden Hash der Revision finden, die Sie sehen möchten. Das können Sie mithilfe des git log-Befehls tun:
git log --oneline
git log --onelineWenn Sie den obigen Befehl ausführen, erhalten Sie eine Projektgeschichte, die ungefähr so aussieht:
git log result
b7119f2 Changes in Scrabble Solver
234be24 Fixing search input bug
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changesVerwenden Sie den Befehl git checkout, um den Commit anzuzeigen, den Sie möchten.
git checkout commit
git checkout b235bf4Danach haben Sie die Möglichkeit, die Dateien anzusehen, Tests auszuführen und so weiter. Selbst wenn Sie Dateien bearbeiten, können Sie sicher sein, dass der aktuelle Zustand Ihres Projekts nicht verloren geht, da alles, was Sie hier tun, nicht im Repository gespeichert wird. Führen Sie den Befehl git checkout master aus, um zum aktuellen Zustand Ihres Projekts zurückzukehren und die Entwicklung fortzusetzen.
git checkout branch
git checkout masterSobald Sie wieder auf dem master-Branch sind, können Sie git revert oder git reset verwenden, um jede gewünschte Änderung rückgängig zu machen.
Einen gespeicherten Snapshot rückgängig machen
Es gibt verschiedene Möglichkeiten, einen Commit rückgängig zu machen. Stellen wir uns vor, unsere Commit-Historie sieht wie folgt aus:
Einen gespeicherten Snapshot rückgängig machen
git log --oneline
863fa8e Making some improvements
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changesIm Folgenden verwenden wir verschiedene Methoden, um den Commit 863fa8e Making some improvements rückgängig zu machen.
Commits mit git checkout rückgängig machen
Der Befehl git checkout checkt den vorherigen Commit, b235bf4, aus und versetzt das Repository in einen Zustand vor dem Verbesserungs-Commit. Dadurch befindet sich das Repository in einem „detached HEAD“-Zustand. Ein solcher Zustand bedeutet, dass jeder neu erstellte Commit verwaist, wenn wieder zu einem bestehenden Branch gewechselt wird. Verwaiste Commits können schließlich vom Garbage Collector von Git entfernt werden. Um Arbeit nicht zu verlieren, erstellen Sie aus diesem Zustand einen Branch. Aus dem detached-HEAD-Zustand des Repos können Sie git checkout -b new_branch_without_improvement_commit aufrufen. Dadurch haben Sie einen neuen Branch mit dem Namen new_branch_without_improvement_commit und wechseln in diesen Zustand. Jetzt haben wir eine neue Verlaufslinie ohne den Commit 863fa8e. In diesem Stadium, wenn wir den Commit 863fa8e nicht mehr haben, können wir uns einige Strategien zum Rückgängigmachen ansehen.
Einen öffentlichen Commit mit git revert rückgängig machen
Das git revert HEAD erstellt einen neuen Commit mit dem Gegenstück des letzten Commits, und ein neuer Commit wird zum aktuellen Branch hinzugefügt:
Einen öffentlichen Commit mit git revert rückgängig machen
git log --oneline
23a4b42 Revert "Making some improvements"
234be24 Making some improvements
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changesJetzt ist der Commit 234be24 erneut rückgängig gemacht, obwohl er weiterhin in der Historie vorhanden ist, ist der neue Commit 23a4b42 eine Umkehrung der Änderungen in 234be24. Im Gegensatz zur vorherigen checkout-Methode können Sie weiterhin denselben Branch verwenden. Dies ist die perfekte „Undo“-Methode für die Arbeit mit Repositories, die öffentlich geteilt werden.
Einen Commit mit git reset rückgängig machen
Git reset ist ein umfassender Befehl mit verschiedenen Einsatzmöglichkeiten und Funktionen. Wenn Sie git reset --hard b235bf4 ausführen, wird die Commit-Historie auf diesen angegebenen Commit zurückgesetzt. An diesem Punkt zeigt git log, dass die Historie so aussieht:
Einen Commit mit git reset rückgängig machen
git log --oneline
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changesDen letzten Commit rückgängig machen
Die oben beschriebenen Strategien zum Rückgängigmachen funktionieren ebenso für den letzten Commit. In manchen Fällen müssen Sie jedoch den neuesten Commit nicht entfernen oder zurücksetzen. Er wurde möglicherweise einfach zu früh erstellt. In einem solchen Fall können Sie diesen letzten Commit mit git commit --amend anpassen, nachdem weitere Änderungen im Arbeitsverzeichnis vorgenommen und mit git add zum Commit vorgemerkt wurden. An diesem Punkt öffnet Git den konfigurierten Systemeditor, sodass Sie die letzte Commit-Nachricht ändern können. Diese neuen Änderungen werden dem geänderten Commit hinzugefügt.
Nicht gespeicherte Änderungen rückgängig machen
Änderungen befinden sich vor dem Commit in den Staging-Index und im Arbeitsverzeichnis, bevor sie in die Repository-Historie übernommen werden. Daher möchten Sie sie möglicherweise aus diesen beiden Bereichen rückgängig machen. Wenn Sie mehr Informationen über diese beiden Bereiche wünschen, ziehen Sie git reset in Betracht.
# Unstage a file
git reset HEAD <file>
# Discard changes in the working directory
git checkout -- <file>Das Arbeitsverzeichnis
Das Arbeitsverzeichnis repräsentiert die Dateien im Dateisystem Ihres Computers, die dem Code-Editor zum Anwenden von Änderungen zur Verfügung stehen. Git hat einige Werkzeuge zur Verwaltung des Arbeitsverzeichnisses, darunter die Befehle git clean und git reset.
Der Staging-Index
Der Staging-Index ist einer der Bäume von Git. Er verfolgt die Änderungen, die im Arbeitsverzeichnis vorgenommen wurden. Der Befehl, der Änderungen zum Staging-Bereich hinzufügt, ist git add. Hier können wir den Befehl git reset verwenden, um Änderungen rückgängig zu machen. Ein --mixed-Reset verschiebt die Änderungen vom Staging-Index zurück ins Arbeitsverzeichnis.
Öffentliche Änderungen rückgängig machen
Der beste Weg, öffentliche Änderungen rückgängig zu machen, ist der Befehl git revert. Verwenden Sie dafür niemals git reset, da dadurch die Commits in der gemeinsam genutzten Historie entfernt werden. Er ist dafür gedacht, lokale Änderungen am Arbeitsverzeichnis und am Staging-Index rückgängig zu machen. Git revert speichert die Commits, die Sie rückgängig machen möchten, und erstellt einen neuen Commit anstelle desjenigen, den Sie nicht mehr benötigen.
Practice
Was sind die Funktionen der verschiedenen Git-Befehle, die zum Rückgängigmachen von Änderungen und Commits verwendet werden?