Das Wichtigste, "sichere" Kopien eines Softwareprojekts zu erhalten, ist beruhigend: Wenn Ihr Projekt plötzlich kaputt geht, wissen Sie, dass Sie einfachen Zugriff auf eine funktionale Version haben, und Sie können genau feststellen, wo das Problem liegt wurde vorgestellt. Zu diesem Zweck ist das Aufzeichnen von Commits nutzlos, ohne dass Änderungen rückgängig gemacht werden können. Da Git so viele Komponenten hat, kann das "Rückgängigmachen" viele verschiedene Bedeutungen haben. Zum Beispiel können Sie:
Um es noch komplizierter zu machen, gibt es mehrere Möglichkeiten, ein Commit rückgängig zu machen. Du kannst entweder:
Git hat für jede dieser Situationen ein eigenes Werkzeug. Beginnen wir mit dem Arbeitsverzeichnis.
Der Zeitraum unmittelbar nach dem Sichern einer sicheren Kopie eines Projekts ist eine große Innovation. Befähigt durch das Wissen, das Sie tun können etwas Wenn Sie die Codebasis nicht beschädigen möchten, können Sie nach Herzenslust experimentieren. Dieses sorglose Experimentieren ist jedoch oftmals falsch und führt zu einem Arbeitsverzeichnis mit einem Haufen Off-Topic-Code. Wenn Sie diesen Punkt erreicht haben, möchten Sie wahrscheinlich die folgenden Befehle ausführen:
git reset --hard HEAD git clean -f
Diese Konfiguration von git reset
macht das Arbeitsverzeichnis und die Bühne mit den Dateien des neuesten Commits (auch als KOPF
) alle unwichtigen Änderungen in verfolgt Dateien. Entsorgen untracked Dateien müssen Sie die git sauber
Befehl. Git ist sehr vorsichtig beim Entfernen von Code, daher müssen Sie auch den Code angeben -f
Option, um das Löschen dieser Dateien zu erzwingen.
Es ist auch möglich, einzelne Dateien anzuvisieren. Mit dem folgenden Befehl wird eine einzelne Datei im Arbeitsverzeichnis an die Version des letzten Commits angepasst.
git checkout KOPF
Durch diesen Befehl wird der Projektverlauf überhaupt nicht geändert, sodass Sie ihn sicher ersetzen können KOPF
mit einer Festschreibungs-ID, einem Zweig oder einem Tag, damit die Datei der Version in diesem Festschreiben entspricht. Aber tun nicht versuchen Sie es mit git reset
, als es werden Ändern Sie Ihre Geschichte (erklärt in Commits rückgängig machen).
git checkout
Bei der Konfiguration Ihres nächsten Commits fügen Sie gelegentlich eine zusätzliche Datei zur Bühne hinzu. Der folgende Aufruf von git reset
wird es inszenieren:
git reset HEAD
Das auslassen --schwer
Flag weist Git an, das Arbeitsverzeichnis (im Gegensatz zu git reset --hard HEAD
, die alle Dateien im Arbeitsverzeichnis und auf der Bühne zurücksetzt). Die bereitgestellte Version der Datei stimmt überein KOPF
, und das Arbeitsverzeichnis behält die geänderte Version bei. Wie zu erwarten ist, führt dies zu einer nicht mehr gespeicherten Änderung in Ihrem Git-Status
Ausgabe.
git reset
Es gibt zwei Möglichkeiten, ein Commit mithilfe von Git rückgängig zu machen: Sie haben eine der folgenden Möglichkeiten zurücksetzen Sie können es einfach aus dem Projektverlauf entfernen, oder Sie können zurückkehren es durch die Erzeugung eines Neu Festschreiben, das die im Original eingeführten Änderungen beseitigt. Das Rückgängigmachen durch ein anderes Festschreiben kann übermäßig erscheinen, aber das Umschreiben des Protokolls durch das vollständige Entfernen von Festschreibungen kann in Multi-User-Workflows schwerwiegende Folgen haben.
Das vielseitigste git reset
kann auch verwendet werden Bewegung das KOPF
Referenz.
git reset HEAD ~ 1
Das KOPF ~ 1
Syntaxparameter gibt das Commit an, das unmittelbar vorher erfolgt KOPF
(Gleichfalls, KOPF ~ 2
bezieht sich auf das zweite Commit vor KOPF
). Durch Bewegen der KOPF
Referenz rückwärts entfernen, entfernen Sie effektiv das letzte Commit aus dem Projektverlauf.
KOPF
zu KOPF ~ 1
mit git reset
Dies ist ein einfacher Weg, um ein paar Commits zu entfernen, die sich nicht mit dem Thema befasst haben, aber es gibt ein ernstes Problem mit der Zusammenarbeit. Wenn andere Entwickler auf der Grundlage des von uns entfernten Commits aufgebaut hätten, wie würden sie sich dann mit unserem Repository synchronisieren? Sie müssten uns nach der ID des Ersetzungs-Commits fragen, sie manuell in Ihrem Repository nachverfolgen, alle ihre Änderungen in dieses Commit verschieben, Zusammenführungskonflikte lösen und dann ihre "neuen" Änderungen mit jedem teilen nochmal. Stellen Sie sich vor, was in einem Open-Source-Projekt mit Hunderten von Mitwirkenden passieren würde…
Der Punkt ist, öffentliche Commits nicht zurücksetzen, Sie können jedoch auch private löschen, die Sie nicht an Dritte weitergegeben haben. Wir werden dieses Konzept später in dieser Sitzung erneut betrachten.
Um die durch das Zurücksetzen öffentlicher Commits eingeführten Probleme zu beheben, haben Git-Entwickler eine andere Möglichkeit entwickelt, Commits rückgängig zu machen: das Revert. Anstatt vorhandene Commits zu ändern, fügt das Zurücksetzen ein Neu Festlegen, dass das Problem rückgängig gemacht wird
git zurückkehren
Dadurch werden die Änderungen im angegebenen Commit übernommen, das Rückgängigmachen der Änderungen und das Erstellen eines neuen Commits mit dem resultierenden Änderungssatz erfolgt. Für Git und andere Benutzer sieht das Zurücksetzungs-Commit aus und verhält sich wie jedes andere Commit - es macht einfach die durch einen früheren Commit eingeführten Änderungen rückgängig.
Dies ist der ideale Weg, um Änderungen rückgängig zu machen, die bereits an ein öffentliches Repository übergeben wurden.
Sie können Commits nicht nur vollständig rückgängig machen, sondern auch ändern das letzte Festschreiben, indem die Änderungen wie gewohnt bereitgestellt und anschließend ausgeführt werden:
git begehen --amend
Diese ersetzt Das vorherige Festschreiben, anstatt ein neues zu erstellen, was sehr nützlich ist, wenn Sie vergessen haben, ein oder zwei Dateien hinzuzufügen. Der Commit-Editor enthält die alte Commit-Nachricht. Wieder musst du Achtung bei Verwendung der --ändern
flag, da es die Geschichte sehr ähnlich schreibt git reset
.
Diese Lektion repräsentiert ein Kapitel aus Git Erfolgreich, ein kostenloses eBook aus dem Team von Syncfusion.