Git Succinctly Änderungen rückgängig machen

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:

  • Machen Sie Änderungen im Arbeitsverzeichnis rückgängig
  • Machen Sie Änderungen im Bereitstellungsbereich rückgängig
  • Rückgängig machen eines gesamten Commits

Um es noch komplizierter zu machen, gibt es mehrere Möglichkeiten, ein Commit rückgängig zu machen. Du kannst entweder:

  1. Löschen Sie einfach den Commit aus dem Projektverlauf.
  2. Belassen Sie das Commit so, wie es ist, und verwenden Sie ein neues Commit, um die durch den ersten Commit eingeführten Änderungen rückgängig zu machen.

Git hat für jede dieser Situationen ein eigenes Werkzeug. Beginnen wir mit dem Arbeitsverzeichnis.


Rückgängig machen im 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.


Zurücksetzen aller nicht festgeschriebenen Änderungen

Einzelne Dateien

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).


Wiederherstellen einer Datei mit git checkout

Rückgängigmachen im Bereitstellungsbereich

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.


Datei mit bereitstellen git reset

Commits rückgängig machen

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.

Zurücksetzen

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.


Ziehen um 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.

Umkehren

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.


Ein Commit mit einem Revert-Commit rückgängig machen

Dies ist der ideale Weg, um Änderungen rückgängig zu machen, die bereits an ein öffentliches Repository übergeben wurden.

Änderung

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.


Änderung des letzten Commit

Diese Lektion repräsentiert ein Kapitel aus Git Erfolgreich, ein kostenloses eBook aus dem Team von Syncfusion.