Bei der Arbeit mit Versionskontrollsystemen wie Git kann es manchmal notwendig sein, ein Commit aus dem Projektverlauf zu entfernen. Dies kann aus verschiedenen Gründen verursacht werden, z. B. wenn Sie bestimmte Änderungen nicht speichern möchten oder wenn Sie Fehler korrigieren müssen. In jedem Fall sollte das Löschen eines Commits nicht zum Verlust wichtiger Dateien oder Änderungen führen. In dieser detaillierten Anleitung erfahren Sie, wie Sie ein Commit aus dem Verlauf entfernen, aber alle benötigten Dateien beibehalten.
Der erste Schritt besteht darin, das Commit zu definieren, das Sie löschen möchten. Dazu benötigen Sie eine Commit-ID, die Sie mit dem Befehl finden können git log. Die Commit-ID sieht wie ein Zeichensatz aus, zum Beispiel, abcdef123456.
Wenn Sie sich für die Commit-ID entschieden haben, können Sie den Befehl verwenden git rebase -i zum Öffnen des interaktiven Umbaus. In diesem Modus können Sie den Commit-Verlauf bearbeiten, bevor Sie Änderungen an das Repository senden. Suchen Sie das Commit, das Sie löschen möchten, und ändern Sie den Befehl zum Umblättern in edit.
Nachdem Sie die Änderungen gespeichert und die Datei geschlossen haben, beginnt Git mit der Neupositionierung. Es gibt Ihnen die Kontrolle über jedes Commit, einschließlich des Commits, das Sie löschen möchten. Geben Sie den Befehl ein git reset HEAD^, um das letzte Commit rückgängig zu machen, indem Änderungen im Arbeitsverzeichnis gespeichert werden. Dadurch können Sie das Commit aus dem Verlauf entfernen, aber alle benötigten Dateien behalten.
Nach Abschluss des Umbaus und des Löschvorgangs des Commits können Sie den Befehl verwenden git push --force, um die Änderungen an das Remote-Repository zu senden. Seien Sie jedoch vorsichtig, wenn Sie diesen Befehl verwenden, da er die Arbeit anderer Leute, die mit dem Repository arbeiten, beeinträchtigen kann. Es ist am besten, solche Änderungen mit dem Team oder den Projektmitgliedern zu besprechen, bevor Sie den Befehl verwenden --force.
Verstehen der Notwendigkeit, ein Commit zu entfernen
Das Entfernen eines Commits kann in verschiedenen Situationen erforderlich sein, z. B.:
- Ein Codefehler oder ein zu reparierender Zusammenführungskonflikt;
- Hinzufügen von groß angelegten Änderungen, die nicht in einem einzigen Commit erfasst werden sollten;
- Die Notwendigkeit, vertrauliche Daten zu löschen, die im Commit-Verlauf enthalten sind;
- Der Wunsch, den Projektverlauf von unnötigen Informationen oder Junk-Commits zu löschen
Sichern von Dateien vor dem Löschen
Es wird empfohlen, diese Dateien zu sichern, bevor Sie das Commit aus dem Git-Verlauf entfernen und die Dateien speichern. Dadurch können Sie Dateien sicher wiederherstellen, wenn beim Entfernen eines Commits ein Fehler auftritt oder Probleme auftreten.
Es gibt mehrere Möglichkeiten, Dateien zu sichern:
| Art | Die Beschreibung |
|---|---|
| 1. Manuelles Kopieren | Die einfachste Methode besteht darin, alle Dateien und Ordner, die Sie speichern möchten, in ein anderes Verzeichnis oder auf ein externes Medium zu kopieren. |
| 2. Verwenden des Git-Befehls | Führen Sie den Befehl "git checkout" mit dem Namen der Datei oder des Ordners aus, um eine Kopie in einem anderen Zweig oder in einem anderen Zweig zu erstellen. |
| 3. Verwenden von Tools von Drittanbietern | Es gibt spezielle Tools zum Erstellen von Backups, z. B. Git LFS (Large File Storage) oder Git Annex. Sie ermöglichen es Ihnen, Versionen großer Dateien separat zu verwalten und Kopien zu erstellen, ohne den Git-Verlauf zu ändern. |
Achten Sie unabhängig von der gewählten Methode darauf, die gespeicherten Dateien zu überprüfen und sicherzustellen, dass alle erforderlichen Daten kopiert wurden. Erst danach können Sie sicher fortfahren, das Commit aus dem Git-Verlauf zu entfernen.
Vorbereiten des Repositorys für das Entfernen eines Commits
Bevor Sie mit dem Entfernen eines Commits aus dem Verlauf beginnen, müssen Sie einige vorbereitende Schritte ausführen:
1. Führen Sie Git Bash aus
Öffnen Sie Git Bash, um Zugriff auf die Git-Befehlszeile in Ihrem Repository zu haben.
2. Wechseln Sie in das Verzeichnis Ihres Repositorys
Verwenden Sie den Befehl cd, um in das Verzeichnis Ihres Repositorys zu wechseln.
3. Stellen Sie sicher, dass Sie sich in einem Zweig befinden, der das Commit enthält, das Sie löschen möchten
Verwenden Sie den Befehl git branch , um sicherzustellen, dass Sie sich in einem Zweig befinden, der das Commit enthält, das Sie löschen möchten.
4. Erstellen Sie einen temporären Zweig
Es wird empfohlen, einen temporären Zweig zu erstellen, um Dateien zu speichern, die mit dem zu löschenden Commit verknüpft sind. Führen Sie den Befehl git branch aus, um einen neuen Zweig zu erstellen, wobei es sich um einen beliebigen Namen für Ihren temporären Zweig handelt.
5. Wechseln Sie zum erstellten temporären Zweig
Verwenden Sie den Befehl git checkout , um zu dem erstellten temporären Zweig zu wechseln und damit zu beginnen.
6. Überprüfen Sie, ob alle erforderlichen Dateien vorhanden sind
Stellen Sie sicher, dass alle Dateien, die mit dem zu löschenden Commit verknüpft sind, in Ihrem temporären Zweig vorhanden sind. Sie können den Befehl git log --stat ausführen, um die von diesem Commit vorgenommenen Änderungen zu sehen und sicherzustellen, dass alle benötigten Dateien vorhanden sind.
Nachdem Sie diese Schritte ausgeführt haben, können Sie das Commit aus dem Repository-Verlauf entfernen und dabei alle benötigten Dateien unverändert beibehalten.
Entfernen eines Commits aus dem Verlauf
Schritt 1: Öffnen Sie das Terminal
Öffnen Sie ein Terminal und navigieren Sie zu dem lokalen Repository, in dem Sie das Commit löschen möchten.
Schritt 2: Verwenden Sie den Befehl git log
Führen Sie den Befehl aus git log, um die Liste der Commits im Verlauf anzuzeigen. Kopieren Sie den Hash des Commits, das Sie löschen möchten.
Schritt 3: Verwenden Sie den Befehl git rebase
Führen Sie den Befehl aus git rebase -i HEAD~N, wobei N die Anzahl der Commits ist, die Sie von der aktuellen Version entfernen möchten. Ein Texteditor wird geöffnet, in dem Sie eine Liste der Commits sehen. Suchen Sie das Commit, das Sie löschen möchten, und löschen Sie seine Zeile. Speichern Sie die Datei, und schließen Sie den Editor.
Schritt 4: Verwenden Sie den Befehl git push -f
Nachdem Sie die Bearbeitung des Verlaufs abgeschlossen haben, müssen Sie den Befehl ausführen git push -f, um den geänderten Verlauf an einen Remote-Server zu senden. Beachten Sie, dass die Verwendung -f das Flag erzwingt ein Update des Remote-Repositorys und kann zu Datenverlusten führen, wenn andere Personen mit diesem Repository arbeiten.
Glückwunsch! Sie haben das Commit erfolgreich aus dem Git-Verlauf entfernt, die Dateien jedoch unberührt gelassen. Seien Sie vorsichtig bei der Verwendung dieses Verfahrens und stellen Sie sicher, dass Sie die Auswirkungen des Löschens eines Commits aus dem Verlauf vollständig verstehen.
Überprüfen des erfolgreichen Löschens eines Commits
Nachdem Sie das Commit aus dem Repository-Verlauf entfernt haben, können Sie überprüfen, ob die Operation erfolgreich war.
1. Führen Sie den Befehl git log an der Eingabeaufforderung oder im Terminal aus, um den aktualisierten Commit-Verlauf anzuzeigen. Stellen Sie sicher, dass das gelöschte Commit nicht mehr in der Liste angezeigt wird.
2. Geben Sie den Befehl git show ein, wobei dies der Hash des Remote-Commits ist, das Sie überprüfen möchten. Überprüfen Sie, ob der Befehl einen Fehler oder eine Nachricht zurückgibt, die besagt, dass das Commit nicht existiert.
3. Öffnen Sie die Projektdateien, die Sie im Remote-Commit geändert haben. Stellen Sie sicher, dass die Änderungen nicht erhalten bleiben und die Dateien vor dem Löschen des Commits auf den Status wiederhergestellt werden.
Wenn alle angegebenen Schritte erfolgreich ausgeführt wurden, bedeutet dies, dass das Commit erfolgreich aus dem Verlauf entfernt wurde, die Dateien jedoch intakt geblieben sind.
Beachten Sie, dass das Entfernen eines Commits aus dem Verlauf zu Problemen bei der Repository-Synchronisierung führen kann. Wenn Sie als Team arbeiten oder sich auf einem Remote-Server befinden, müssen Sie sicherstellen, dass die Änderungen korrekt angewendet und mit anderen Projektteilnehmern abgestimmt wurden.