Wie man gelöschte Commits in Git identifiziert und wiederherstellt

GitGitBeginner
Jetzt üben

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

Einführung

Git ist ein leistungsstarkes Versionskontrollsystem, das Entwicklern hilft, Änderungen zu verfolgen, zusammenzuarbeiten und einen umfassenden Verlauf ihrer Projekte zu pflegen. Manchmal können Entwickler jedoch versehentlich wichtige Commits löschen, was zum Verlust wertvoller Codezeilen und des Projektverlaufs führt. In diesem Tutorial werden Sie durch den Prozess der Identifizierung und Wiederherstellung gelöschter Commits in Git geführt, um sicherzustellen, dass Sie verlorenen Code wiederherstellen und einen vollständigen Commit-Verlauf für Ihre Projekte aufrechterhalten können.

Grundlagen von Git-Commits

Git ist ein verteiltes Versionskontrollsystem, das es Entwicklern ermöglicht, Änderungen in ihrem Code über die Zeit zu verfolgen. Das Herzstück von Git ist das Konzept des Commits, der einen Snapshot des Projektzustands zu einem bestimmten Zeitpunkt darstellt.

Was ist ein Git-Commit?

Ein Git-Commit ist die grundlegende Einheit der Änderung in einem Git-Repository. Wenn Sie Änderungen an den Dateien Ihres Projekts vornehmen und diese Änderungen speichern möchten, erstellen Sie einen neuen Commit. Jeder Commit enthält die folgenden Informationen:

  1. Eindeutiger Bezeichner: Jeder Commit erhält eine eindeutige 40-stellige hexadezimale Zeichenkette, bekannt als Commit-Hash oder Commit-SHA. Dieser Bezeichner wird verwendet, um den Commit eindeutig zu referenzieren.
  2. Autor: Die Person, die die Änderungen vorgenommen und den Commit erstellt hat.
  3. Zeitstempel: Das Datum und die Uhrzeit, zu der der Commit erstellt wurde.
  4. Commit-Nachricht: Eine kurze Beschreibung der im Commit vorgenommenen Änderungen.
  5. Snapshot der Dateien: Der vollständige Zustand aller Dateien im Projektverzeichnis zum Zeitpunkt des Commits.
  6. Eltern-Commit(s): Der oder die vorherigen Commits, auf denen der aktuelle Commit basiert.

Aufbau eines Git-Commits

Wenn Sie in einem Git-Repository einen neuen Commit erstellen, erfolgen die folgenden Schritte:

  1. Änderungen zur Staging-Area hinzufügen: Sie müssen zunächst die Änderungen, die Sie in den Commit aufnehmen möchten, mit dem Befehl git add zur Staging-Area hinzufügen.
  2. Commit erstellen: Sobald die Änderungen in der Staging-Area sind, können Sie einen neuen Commit mit dem Befehl git commit erstellen. Dadurch wird der aktuelle Zustand des Projekts erfasst und ein neuer Commit erstellt.
  3. Branch aktualisieren: Der neue Commit wird dann dem aktuellen Branch hinzugefügt, und der Zeiger des Branches wird auf den neuen Commit verschoben.
graph LR A[Working Directory] --> B[Staging Area] B --> C[Git Repository]

Anzeigen des Commit-Verlaufs

Sie können den Commit-Verlauf eines Git-Repositorys mit dem Befehl git log anzeigen. Dadurch wird eine Liste aller Commits im Repository angezeigt, einschließlich ihrer Commit-Hashes, Autoren, Zeitstempel und Commit-Nachrichten.

$ git log
commit 1234567890abcdef1234567890abcdef12345678
Author: John Doe <[email protected]>
Date:   Mon Apr 24 12:34:56 2023 +0000

    Implement new feature X

commit fedcba0987654321fedcba0987654321fedcba
Author: Jane Smith <[email protected]>
Date:   Fri Apr 21 09:87:65 2023 +0000

    Fix bug in module Y

Identifizieren von gelöschten Commits

Im Laufe der Softwareentwicklung ist es nicht ungewöhnlich, dass Entwickler versehentlich Commits aus einem Git-Repository löschen. Das Identifizieren dieser gelöschten Commits ist eine essentielle Fähigkeit für jeden Git-Benutzer.

Grundlagen des Git Reflogs

Das Git Reflog ist ein leistungsstarkes Werkzeug, das Ihnen hilft, gelöschte Commits zu identifizieren und wiederherzustellen. Das Reflog ist ein Logbuch aller Änderungen an den Branch-Referenzen des Repositorys, einschließlich des Löschens von Commits.

Um das Reflog anzuzeigen, können Sie den Befehl git reflog verwenden:

$ git reflog
1234567 HEAD@{0}: commit: Implement new feature X
fedcba0 HEAD@{1}: commit: Fix bug in module Y
abcd123 HEAD@{2}: commit: Update documentation

Jeder Eintrag im Reflog repräsentiert eine Änderung am Zustand des Repositorys, einschließlich des Commit-Hashes, der Art der Änderung (z. B. commit) und einer kurzen Beschreibung.

Identifizieren von gelöschten Commits

Um einen gelöschten Commit mithilfe des Reflogs zu identifizieren, können Sie nach Einträgen suchen, die anzeigen, dass ein Commit gelöscht wurde. Wenn Sie beispielsweise einen Eintrag wie diesen sehen:

abcd123 HEAD@{2}: commit (amend): Update documentation

Das bedeutet, dass der Commit mit dem Hash abcd123 zuvor korrigiert (d. h. geändert und durch einen neuen Commit ersetzt) wurde.

Alternativ können Sie auch einen Eintrag wie diesen sehen:

abcd123 HEAD@{2}: commit (delete): Update documentation

Dies zeigt an, dass der Commit mit dem Hash abcd123 aus dem Repository gelöscht wurde.

Durch die Prüfung des Reflogs können Sie den Commit-Hash des gelöschten Commits identifizieren und ihn verwenden, um den Commit wiederherzustellen, wie im nächsten Abschnitt beschrieben.

Wiederherstellen von gelöschten Commits

Nachdem Sie einen gelöschten Commit mithilfe des Git Reflogs identifiziert haben, können Sie den Commit wiederherstellen und ihn in Ihrem Repository wieder einfügen. Dieser Prozess beinhaltet das Erstellen eines neuen Branches oder das Cherry-Picken (selektives Übernehmen) des Commits zurück in den aktuellen Branch.

Wiederherstellen von gelöschten Commits

Um einen gelöschten Commit wiederherzustellen, können Sie den Befehl git checkout verwenden, um einen neuen Branch auf Basis des gelöschten Commits zu erstellen:

$ git checkout -b restored-commit abcd123
Switched to a new branch 'restored-commit'

Dadurch wird ein neuer Branch namens restored-commit erstellt, der auf den gelöschten Commit mit dem Hash abcd123 zeigt. Anschließend können Sie bei Bedarf an diesem Branch weiterarbeiten.

Alternativ können Sie den Befehl git cherry-pick verwenden, um die Änderungen aus dem gelöschten Commit direkt auf den aktuellen Branch anzuwenden:

$ git cherry-pick abcd123
[master 1234567] Update documentation
 Date: Wed Apr 26 10:23:45 2023 +0000
 1 file changed, 2 insertions(+)

Dadurch werden die Änderungen aus dem Commit mit dem Hash abcd123 auf den aktuellen Branch (in diesem Beispiel master) angewendet.

Überprüfen des wiederhergestellten Commits

Nachdem Sie den gelöschten Commit wiederhergestellt haben, können Sie den Befehl git log verwenden, um zu überprüfen, ob der Commit erfolgreich wiederhergestellt wurde:

$ git log
commit 1234567890abcdef1234567890abcdef12345678
Author: John Doe <[email protected]>
Date:   Wed Apr 26 10:23:45 2023 +0000

    Update documentation

commit fedcba0987654321fedcba0987654321fedcba
Author: Jane Smith <[email protected]>
Date:   Fri Apr 21 09:87:65 2023 +0000

    Fix bug in module Y

Der wiederhergestellte Commit sollte nun im Commit-Verlauf sichtbar sein.

Zu beachten

Beachten Sie, dass das Git Reflog standardmäßig nur Informationen über die letzten 30 Tage speichert. Wenn der gelöschte Commit älter als 30 Tage ist, ist er möglicherweise nicht im Reflog verfügbar, und Sie können ihn möglicherweise nicht mit dieser Methode wiederherstellen.

Zusätzlich können Sie den gelöschten Commit möglicherweise nicht aus Ihrem lokalen Repository wiederherstellen, wenn der gelöschte Commit bereits an ein Remote-Repository gepusht wurde und das Remote-Repository aktualisiert wurde. In solchen Fällen müssen Sie möglicherweise mit Ihrem Team koordinieren, um den gelöschten Commit aus dem Remote-Repository wiederherzustellen.

Zusammenfassung

In diesem Tutorial haben Sie gelernt, wie Sie effektiv gelöschte Commits in Git identifizieren und wiederherstellen können. Indem Sie die verschiedenen verfügbaren Techniken und Befehle verstehen, können Sie nun verlorenen Code wiederherstellen, einen vollständigen Commit-Verlauf aufrechterhalten und die Integrität des Entwicklungsprozesses Ihres Projekts gewährleisten. Die robusten Versionskontrollfunktionen von Git machen es zu einem entscheidenden Werkzeug für die moderne Softwareentwicklung, und das Beherrschen der Fähigkeit, gelöschte Commits zu verwalten, ist eine wertvolle Fähigkeit für jeden Entwickler, der mit Git arbeitet.