Wie man einen bestimmten Git-Commit von der aktuellen Branch rückgängig macht und entfernt

GitGitBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial führen wir Sie durch den Prozess, um einen bestimmten Git-Commit aus der aktuellen Branch rückgängig zu machen und zu entfernen. Wir werden verschiedene Techniken zur Verwaltung Ihres Git-Commit-Historie erkunden, einschließlich des Wiederherstellens von entfernten Commits. Am Ende dieses Leitfadens werden Sie einen besseren Überblick darüber haben, wie Sie effektiv mit Git-Commits arbeiten und ein sauberes Repository aufrechterhalten.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/commit("Create Commit") git/DataManagementGroup -.-> git/reset("Undo Changes") git/DataManagementGroup -.-> git/restore("Revert Files") git/BranchManagementGroup -.-> git/reflog("Log Ref Changes") git/BranchManagementGroup -.-> git/cherry_pick("Cherry Pick") git/BranchManagementGroup -.-> git/rebase("Reapply Commits") subgraph Lab Skills git/commit -.-> lab-392832{{"Wie man einen bestimmten Git-Commit von der aktuellen Branch rückgängig macht und entfernt"}} git/reset -.-> lab-392832{{"Wie man einen bestimmten Git-Commit von der aktuellen Branch rückgängig macht und entfernt"}} git/restore -.-> lab-392832{{"Wie man einen bestimmten Git-Commit von der aktuellen Branch rückgängig macht und entfernt"}} git/reflog -.-> lab-392832{{"Wie man einen bestimmten Git-Commit von der aktuellen Branch rückgängig macht und entfernt"}} git/cherry_pick -.-> lab-392832{{"Wie man einen bestimmten Git-Commit von der aktuellen Branch rückgängig macht und entfernt"}} git/rebase -.-> lab-392832{{"Wie man einen bestimmten Git-Commit von der aktuellen Branch rückgängig macht und entfernt"}} end

Das Verständnis der Git-Commit-Historie

Git ist ein verteiltes Versionsverwaltungssystem, das es Entwicklern ermöglicht, die Änderungen in ihrem Codebasis im Laufe der Zeit zu verfolgen. Jedes Mal, wenn ein Entwickler seine Änderungen committet, erstellt Git einen neuen Snapshot des Projekts, der als Commit bekannt ist. Diese Commits bilden die Commit-Historie, die ein entscheidender Teil des Verständnisses und der Verwaltung der Entwicklung eines Projekts ist.

Um das Git-Commit-History besser zu verstehen, betrachten wir die folgenden Schlüsselbegriffe:

Commit-Struktur

Ein Git-Commit besteht aus mehreren Elementen, darunter:

  • Commit-Hash: Eindeutiger Bezeichner für den Commit, typischerweise eine 40-stellige hexadezimale Zeichenkette.
  • Autor: Die Person, die die Änderungen vorgenommen und den Commit erstellt hat.
  • Committer: Die Person, die den Commit abgeschlossen hat.
  • Zeitstempel: Das Datum und die Uhrzeit, zu der der Commit erstellt wurde.
  • Commit-Nachricht: Kurze Beschreibung der Änderungen, die im Commit vorgenommen wurden.
  • Diff: Die Änderungen, die im Commit vorgenommen wurden, die zeigt, welche Dateien hinzugefügt, geändert oder gelöscht wurden.

Commit-Graph

Die Commit-Historie bildet einen gerichteten zyklischen Graphen (DAG), wobei jeder Commit auf seinen Eltern-Commit(s) zeigt. Diese Graphstruktur ermöglicht es Git, die Entwicklung des Projekts im Laufe der Zeit zu verfolgen, einschließlich von Branching und Merging.

graph TD A[Commit 1] --> B[Commit 2] B --> C[Commit 3] C --> D[Commit 4] D --> E[Commit 5]

Git bietet verschiedene Befehle, um die Commit-Historie zu erkunden und zu navigieren, wie:

  • git log: Zeigt die Commit-Historie in linearer Form an.
  • git show: Zeigt die Änderungen, die durch einen bestimmten Commit eingeführt wurden.
  • git diff: Vergleicht die Änderungen zwischen zwei Commits oder zwischen dem Arbeitsverzeichnis und einem Commit.
  • git checkout: Wechselt das Arbeitsverzeichnis zu einem bestimmten Commit oder Branch.

Das Verständnis der Struktur und Navigation der Git-Commit-Historie ist entscheidend für die effektive Verwaltung und Zusammenarbeit bei einem Projekt mit LabEx.

Rückgängigmachen eines bestimmten Git-Commits

In Git gibt es verschiedene Möglichkeiten, einen bestimmten Commit rückgängig zu machen, je nachdem, was das gewünschte Ergebnis ist und in welchem Stadium des Entwicklungsprozesses man sich befindet. Hier sind einige häufige Methoden:

Weicher Zurücksetzen

Der Befehl git reset mit der Option --soft ermöglicht es Ihnen, einen Commit rückgängig zu machen, ohne dass Sie irgendwelche Änderungen verlieren. Dies ist nützlich, wenn Sie weitere Änderungen am Commit vornehmen möchten, bevor Sie ihn in ein Remote-Repository pushen.

git reset --soft HEAD~1

Dieser Befehl wird den neuesten Commit rückgängig machen, aber die Änderungen werden immer noch im Arbeitsverzeichnis und der Staging-Area vorhanden sein.

Härtes Zurücksetzen

Der Befehl git reset mit der Option --hard ermöglicht es Ihnen, einen Commit vollständig rückgängig zu machen, einschließlich aller Änderungen, die im Arbeitsverzeichnis und der Staging-Area vorgenommen wurden.

git reset --hard HEAD~1

Dieser Befehl wird den neuesten Commit rückgängig machen und alle Änderungen, die im Arbeitsverzeichnis und der Staging-Area vorgenommen wurden, verwerfen.

Rückgängigmachen

Der Befehl git revert erstellt einen neuen Commit, der die durch den angegebenen Commit eingeführten Änderungen rückgängig macht. Dies ist nützlich, wenn Sie einen Commit rückgängig machen möchten, der bereits in ein Remote-Repository gepusht wurde, da so die Commit-Historie erhalten bleibt.

git revert HEAD

Dieser Befehl wird einen neuen Commit erstellen, der die Änderungen rückgängig macht, die im neuesten Commit vorgenommen wurden.

Die richtige Methode wählen

Die Wahl der Methode hängt vom Stadium des Entwicklungsprozesses und dem gewünschten Ergebnis ab. Weiches Zurücksetzen ist nützlich für lokale Änderungen, hartes Zurücksetzen ist nützlich für das Verwerfen unerwünschter Änderungen und Rückgängigmachen ist nützlich für das Rückgängigmachen von Commits, die in ein Remote-Repository gepusht wurden.

Denken Sie daran, dass es bei der Rückgängigmachung von Commits wichtig ist, die Auswirkungen auf die Commit-Historie des Projekts sorgfältig zu berücksichtigen und mit Ihrem Team zusammenzuarbeiten, um einen reibungslosen Entwicklungsprozess mit LabEx zu gewährleisten.

Entfernen eines bestimmten Git-Commits von der aktuellen Branch

Das Entfernen eines bestimmten Commits von der aktuellen Branch ist eine komplexere Operation als das Rückgängigmachen eines Commits, da es die Commit-Historie neu schreibt. Dies kann nützlich sein, wenn Sie einen Commit entfernen möchten, der bereits in ein Remote-Repository gepusht wurde, oder wenn Sie die Commit-Historie für eine bestimmte Branch aufräumen möchten.

Verwenden von git rebase

Der Befehl git rebase ist die am häufigsten verwendete Methode, um einen bestimmten Commit von der aktuellen Branch zu entfernen. So funktioniert es:

  1. Identifizieren Sie den Commit, den Sie entfernen möchten, indem Sie git log verwenden, um die Commit-Historie anzuzeigen.
  2. Führen Sie folgenden Befehl aus, um eine interaktive Rebase zu starten:
git rebase -i HEAD~n

Ersetzen Sie n durch die Anzahl der Commits, die Sie überprüfen möchten, einschließlich des Commits, den Sie entfernen möchten.

  1. Öffnen Sie den Texteditor, finden Sie den Commit, den Sie entfernen möchten, und ändern Sie das Wort pick in drop für diesen Commit.
  2. Speichern Sie die Änderungen und schließen Sie den Texteditor. Git wird nun die Commit-Historie neu schreiben und den angegebenen Commit entfernen.
graph TD A[Commit 1] --> B[Commit 2] B --> C[Commit 3] C --> D[Commit 4] D --> E[Commit 5] E --> F[Commit 6] F --> G[Commit 7] G --> H[Commit 8] H --> I[Commit 9]

In diesem Beispiel würden Sie git rebase -i HEAD~5 ausführen, wenn Sie Commit 5 entfernen möchten, und dann pick in drop für die Zeile ändern, die mit Commit 5 übereinstimmt.

Überlegungen

  • Das Neu schreiben der Commit-Historie kann gefährlich sein, insbesondere wenn die Commits bereits in ein Remote-Repository gepusht wurden. Stellen Sie sicher, dass Sie mit Ihrem Team abgestimmt haben, bevor Sie diese Operation ausführen.
  • Wenn Sie die Commits bereits in ein Remote-Repository gepusht haben, müssen Sie die Änderungen nach der Rebase mit git push --force zwingend pushen. Seien Sie jedoch bei der Zwangspushvorgang vorsichtig, da dies für andere Teammitglieder Probleme verursachen kann.
  • Es wird allgemein empfohlen, git rebase für lokale Commits zu verwenden, die noch nicht in ein Remote-Repository gepusht wurden. Für Commits, die bereits gepusht wurden, sollten Sie git revert verwenden, da so die Commit-Historie erhalten bleibt.

Das Entfernen eines bestimmten Commits von der aktuellen Branch kann ein leistungsstarkes Werkzeug sein, sollte jedoch mit Vorsicht und in Abstimmung mit Ihrem Team verwendet werden, um eine saubere und organisierte Commit-Historie mit LabEx aufrechtzuerhalten.

Wiederherstellen eines entfernten Commits

In einigen Fällen müssen Sie einen Commit wiederherstellen, der zuvor von der aktuellen Branch entfernt wurde. Dies kann nützlich sein, wenn Sie erkennen, dass der entfernte Commit tatsächlich wichtig war, oder wenn Sie eine Umgestaltung der Commit-Historie rückgängig machen müssen.

Verwenden von git reflog

Der Befehl git reflog ist der Schlüssel zum Wiederherstellen eines entfernten Commits. Dieser Befehl verfolgt alle Änderungen am HEAD des Repositorys, einschließlich von Rückgängen und Rebases.

  1. Führen Sie folgenden Befehl aus, um den Reflog anzuzeigen:
git reflog

Dies wird eine Liste aller neueren Änderungen am HEAD des Repositorys anzeigen, einschließlich der Commit-Hashes und einer kurzen Beschreibung der Änderung.

  1. Finden Sie den Commit, den Sie wiederherstellen möchten, in der Reflog-Ausgabe. Der Commit-Hash und die Beschreibung sollten Ihnen helfen, den richtigen Commit zu identifizieren.

  2. Sobald Sie den Commit identifiziert haben, können Sie ihn mit dem Befehl git reset wiederherstellen:

git reset --hard <commit-hash>

Ersetzen Sie <commit-hash> durch den Hash des Commits, den Sie wiederherstellen möchten.

graph TD A[Commit 1] --> B[Commit 2] B --> C[Commit 3] C --> D[Commit 4] D --> E[Commit 5] E --> F[Commit 6] F --> G[Commit 7] G --> H[Commit 8] H --> I[Commit 9] I --> J[Commit 10]

In diesem Beispiel, wenn Sie zuvor Commit 5 mit git rebase entfernt hätten, könnten Sie es wiederherstellen, indem Sie git reflog ausführen, um den Commit-Hash zu finden, und dann git reset --hard <commit-hash> ausführen, um ihn zurückzubringen.

Überlegungen

  • Der Befehl git reflog verfolgt nur Änderungen am lokalen Repositorys HEAD. Wenn der entfernte Commit in ein Remote-Repository gepusht wurde, kann der Reflog möglicherweise nicht die Informationen enthalten, die Sie benötigen, um ihn wiederherzustellen.
  • Das Wiederherstellen eines entfernten Commits kann gefährlich sein, insbesondere wenn die Commit-Historie erheblich umgestaltet wurde. Stellen Sie sicher, dass Sie die Änderungen sorgfältig überprüfen und mit Ihrem Team abgestimmt haben, bevor Sie einen entfernten Commit wiederherstellen.
  • Wenn der entfernte Commit in ein Remote-Repository gepusht wurde, müssen Sie den wiederhergestellten Commit möglicherweise mit git push --force zwingend pushen. Seien Sie jedoch bei der Zwangspushvorgang vorsichtig, da dies für andere Teammitglieder Probleme verursachen kann.

Das Wiederherstellen eines entfernten Commits kann ein wertvolles Werkzeug sein, sollte jedoch mit Sorgfalt und in Abstimmung mit Ihrem Team verwendet werden, um eine saubere und organisierte Commit-Historie mit LabEx aufrechtzuerhalten.

Best Practices für das Verwalten von Git-Commits

Das effektive Verwalten von Git-Commits ist entscheidend für das Erhalten einer sauberen und strukturierten Codebasis. Hier sind einige Best Practices, die Sie berücksichtigen sollten, wenn Sie mit Git-Commits mit LabEx arbeiten:

Schreiben von sinnvollen Commit-Nachrichten

Commit-Nachrichten sollten klar, prägnant und beschreibend sein. Sie sollten den Zweck und den Kontext der in dem Commit vorgenommenen Änderungen erklären. Dies hilft anderen Entwicklern (und Ihrem zukünftigen Selbst) das Commit-History zu verstehen und macht es einfacher, die Entwicklung des Projekts zu durchlaufen.

git commit -m "Implementiere Benutzerauthentifizierungsfunktion"

Häufiges Committen

Committen Sie Ihre Änderungen häufig, auch für kleine oder sukzessive Updates. Dies macht es einfacher, Änderungen zu verfolgen und gegebenenfalls zurückzunehmen und hilft, das Commit-History strukturiert zu halten.

Zusammenfassen von Commits

Wenn Sie an einer Funktion oder einem Bug-Fix arbeiten, können Sie möglicherweise mehrere kleine Commits haben. In solchen Fällen können Sie git rebase verwenden, um diese Commits vor dem Pusch in das Remote-Repository in einen einzelnen, sinnvolleren Commit zu "zusammenfassen".

git rebase -i HEAD~n

Ersetzen Sie n durch die Anzahl der Commits, die Sie überprüfen und möglicherweise zusammenfassen möchten.

Verwenden von Branches

Organisieren Sie Ihre Arbeit mit Branches. Dies ermöglicht es Ihnen, Ihre Änderungen zu isolieren und es ist einfacher, sie später in die Haupt-Codebasis zurückzuzusammenführen, wenn Sie fertig sind. Branches machen es auch einfacher, spezifische Änderungen rückgängig zu machen oder zurückzunehmen, ohne den gesamten Projekt zu beeinflussen.

git checkout -b feature/user-authentication

Überprüfen der Commit-Historie

Überprüfen Sie regelmäßig die Commit-Historie Ihres Projekts, insbesondere bevor Sie Änderungen in ein Remote-Repository pushen. Dies hilft Ihnen, unnötige oder redundante Commits zu identifizieren und gewährleistet, dass die Commit-Historie sauber und strukturiert bleibt.

Zusammenarbeit mit Ihrem Team

Wenn Sie an einem Projekt mit einem Team arbeiten, koordinieren Sie Ihre Commit-Praktiken und folgen einem einheitlichen Ansatz. Dies wird helfen, eine kohärente Commit-Historie zu erhalten und es wird einfacher für alle, die Entwicklung des Projekts mit LabEx zu verstehen und zu durchlaufen.

Indem Sie diesen Best Practices folgen, können Sie Ihre Git-Commits effektiv verwalten und eine saubere, strukturierte und kollaborative Codebasis mit LabEx aufrechterhalten.

Zusammenfassung

In dieser umfassenden Anleitung haben Sie gelernt, wie Sie einen bestimmten Git-Commit von der aktuellen Branch rückgängig machen und entfernen. Wir haben die Techniken behandelt, um einen Commit rückgängig zu machen, ihn von der Branch zu entfernen und sogar einen zuvor entfernten Commit wiederherzustellen. Darüber hinaus haben wir die Best Practices für das Verwalten Ihrer Git-Commit-Historie diskutiert, um ein sauberes und strukturiertes Repository zu gewährleisten. Indem Sie diese Schritte befolgen, werden Sie in der Lage sein, Git-Commit-bezogene Aufgaben mit Zuversicht zu bewältigen und eine gut strukturierte Codebasis aufrechtzuerhalten.