Git Reflog - So stellen Sie einen gelöschten Zweig wieder her, der nicht zusammengeführt wurde



Dieser Artikel über Git Reflog ist eine umfassende Anleitung zum Wiederherstellen der gelöschten Verzweigung in Git mithilfe von Git Reflog.

„Haben Sie jemals einen Zweig verloren, dessen Quellcode noch nicht im Zweig„ Release “oder im Zweig„ Haupt “zusammengeführt wurde? Was ist, wenn Sie einen gelöschten Zweig neu generieren möchten, obwohl seine Arbeit bereits mit dem Hauptzweig zusammengeführt wurde? “ . Nun, die einzige Lösung für solche Szenarien ist Reflog gehen .

Durch diesen Artikel auf Git Reflog werde ich Ihnen helfenVerstehen Sie die Szenarien, in denen Ihre Arbeit an einem Zweig verloren gehen könnte, und wie Sie den Zweig wiederherstellen können.In diesem Artikel wird auch der Ansatz hervorgehoben, mit dem Sie den unbeabsichtigten Verlust eines Zweigs bei der Arbeit in einem großen Projekt verhindern können.





    1. Was ist Git Reflog?
    2. Wie und wann wird ein Zweig gelöscht?
    3. Stellen Sie einen gelöschten Zweig wieder her
    4. Welche Arbeit wird wiederhergestellt, wenn der gelöschte Zweig wiederhergestellt wird?
    5. Git Reflog-Unterbefehle

Beginnen wir also mit diesem Artikel.



Stellen Sie sich ein Szenario vor, ein maintainer muss viele Feature-Zweige von verschiedenen Mitarbeitern zusammenführen und sie schließlich löschen, aber der Zweig wird versehentlich gelöscht, bevor die Arbeit zusammengeführt werden kann?

Bevor ich mit diesem Artikel fortfahre, möchte ich Ihnen sagen, dass dies in Git nicht möglich ist. sind sicher und fungieren als Kontrollposten, der Ihnen dies nicht erlauben würde. Hier kommt also Git Reflog ins Spiel.

Was ist Git Reflog?

DasDer Befehl 'reflog' behält a verfolgen jede einzelne Änderung in den Referenzen (Zweige oder Tags) eines Repositorys und führt einen Protokollverlauf der Zweige und Tags, die entweder lokal erstellt oder ausgecheckt wurden. Referenzprotokolle wie der Commit-Snapshot, in dem der Zweig erstellt oder geklont, ausgecheckt, umbenannt oder Commits für den Zweig ausgeführt wurden, werden von verwaltet und mit dem Befehl 'reflog' aufgelistet.



Hinweis: Der Zweig kann nur dann aus Ihrem Arbeitsverzeichnis wiederhergestellt werden, wenn der Zweig jemals in Ihrem lokalen Repository vorhanden war, d. H. Der Zweig wurde entweder lokal erstellt oder aus einem Remote-Repository in Ihrem lokalen Repository ausgecheckt, damit Git seine Referenzverlaufsprotokolle speichern kann.

Dieser Befehl muss in dem Repository ausgeführt werden, in dem der Zweig verloren gegangen ist. Wenn Sie dieIn der Remote-Repository-Situation müssen Sie den Befehl reflog auf dem Computer des Entwicklers ausführen, auf dem sich die Verzweigung befand.

Befehl: Reflog gehen

Nun, da Sie wissen, was Git Reflog ist, lassen Sie unsVersuchen Sie, sowohl einen zusammengeführten als auch einen nicht zusammengeführten Zweig zu löschen, und sehen Sie, wie Git damit umgeht.

Schritt 1: Listen Sie die Zweige auf, die zum Master zusammengeführt werden

Schauen Sie sich zuerst die ‘ Meister ’Zweig, wenn Sie sich mit dem folgenden Befehl in einem anderen Zweig befinden:

$ git checkout master

Ausgabe

Git Checkout Master - Git Reflog - Edureka

Erwähnen Sie nun den folgenden Befehl, um eine Liste der zusammengeführten Zweige zu erhalten:

$ git branch --merged

Ausgabe:

Schritt 1.1: Löschen Sie dann den zusammengeführten Zweig:

$ git branch -d Ausgabe # 902

Ausgabe:

Der Zweig 'Problem Nr. 902' wurde erfolgreich gelöscht, da er bereits mit dem Zweig 'Master' zusammengeführt wurde.

Schritt 2: Lassen Sie uns nun die Zweige auflisten, die nicht zum Master zusammengeführt wurden.

$ git branch - nicht zusammengeführt

Ausgabe

Schritt 2.2: Lassen Sie uns abschließend einen nicht zusammengeführten Zweig mit dem folgenden Befehl löschen:

$ git branch -d prepod

Wenn Sie versuchen, einen der Zweige mit nicht abgeschlossener Arbeit zu löschen, z. B. 'Preprod' -Zweig, zeigt git eine Warnmeldung an.

Ausgabe

Bevor ich Ihnen erkläre, wie Sie die Daten in diesem Artikel auf Git Reflog wiederherstellen können, möchte ich Ihnen sagen, was genau passiert, wenn ein Zweig gelöscht wird und unter welchen Umständen der Zweig wiederhergestellt werden kann.

Wie und wann wird ein Zweig gelöscht?

Wie wir wissen, ist Git ein Verteiltes Versionskontrollsystem (DVCS) fungiert jeder Computer mit dem Klon oder einer Kopie des Repositorys als beides Knoten und ein Nabe . DiesDies bedeutet, dass jeder Computer über eine eigene Kopie des gesamten Repository-Codes und -Historie verfügt.Unnötig zu sagen, dass Sie sein werden Teilen Ihre Arbeit mit anderen und Veröffentlichung das Gleiche.

In solchen Szenarien kann es daher drei Fälle geben, in denen ein Zweig in einem realen Szenario gelöscht wird, in dem viele Mitarbeiter an einem großen Projekt arbeiten. Folgendes könnte der Fall sein:

Fall 1 - Ein Entwickler kann den Zweig entweder zusammenführen oder löschen

Stellen Sie sich ein Szenario vor, in dem ein Entwickler den Feature-Zweig lokal mit dem Hauptzweig zusammenführt und dann den Feature-Zweig mit dem Befehl „ Git Zweig ’Befehl mit dem“ - d ”Flag wie in den früheren Screenshots gezeigt.

Befehl: ‘Git branch -d branch_name’

Es kann auch vorkommen, dass der Entwickler beschließt, die Änderungen in der Verzweigung zu löschen und die Verzweigung zu löschen, ohne sie mit dem folgenden Befehl mit einer anderen Verzweigung zusammenzuführen:

Befehl: ‘Git branch -D branch_name’

Was ist der Unterschied zwischen Hashmap und Hashtable?

Mit dem obigen Befehl ist der EntwicklerLöschen Sie den Zweig, der die Git-Warnung überschreibt, mit Gewalt

$ git branch -D preprod

Ausgabe

Hinweis : Der Zweig 'preprod' wird nicht mehr aufgelistet, wenn Sie den Befehl 'git branch' ausführen. Also, yUnsere in diesem Zweig gespeicherte Arbeit geht verloren.

Fall 2 - Ein Entwickler löscht einen Zweig in einem freigegebenen Repository

Stellen Sie sich ein Szenario vor, in dem ein Entwickler mit Lese- / Schreibzugriff versucht, den Remote-Zweig mit Gewalt zu löschenVerwenden Sie den Befehl 'git push' mit dem Flag '–delete'.

$ git push origin - Quickfix löschen

Ausgabe

Abgesehen davon kann es auch vorkommen, dass ein nicht autorisierter oder böswilliger Benutzer einen Push erzwingt, um den Remote-Zweig zu löschen.In diesem Fall kann der Betreuer den gelöschten 'Quickfix' -Zweig nur wiederherstellen, wenn der Entwicklerhatte zuvor diesen Zweig ausgecheckt. In diesem Szenario verfügt das lokale Repository weiterhin über Referenzprotokolle.

Wenn der Betreuer den Zweig nicht wiederherstellen kann, muss der Eigentümer des Zweigs, der ihn gelöscht hat, seine lokalen Reflogs wiederherstellen.

Fall 3 - Ein Hook-Skript mit Superberechtigungen löscht den Zweig

Dies kann ein seltenes, aber mögliches Szenario sein, in dem ein Hook-Skript bei einem bestimmten Git-Operationsereignis ausgelöst wird und die noch nicht zusammengeführten Zweige erzwungen werden. Sie könnenBetrachten Sie einen der oben genannten Befehle, der in einem Hook-Skript mit Sudo-Berechtigungen geschrieben wird.

Nachdem Sie nun wissen, was passiert, wenn Sie den Zweig löschen, lassen Sie uns mit diesem Artikel auf Git Reflog fortfahren und sehen, wie Sie einen verlorenen Zweig wiederherstellen können.

Stellen Sie einen gelöschten Zweig mit Git Reflog wieder her

Schritt 1 :: Verlaufsprotokolle aller Referenzen

Rufen Sie eine Liste aller lokal aufgezeichneten Verlaufsprotokolle für alle Referenzen ('master', 'uat' und 'prepod') in diesem Repository ab.

Reflog gehen

Schritt 2 :: Identifizieren Sie den Verlaufsstempel

Wie Sie dem obigen Schnappschuss entnehmen können, ist die Hervorgehobene Commit-ID: e2225bb zusammen mit dem HEAD-Zeigerindex: 4 ist derjenige, wenn Wiederverkauf Der Zweig wurde aus dem aktuellen HEAD-Zeiger erstellt, der auf Ihre neueste Arbeit verweist.

Schritt 3 :: Genesen

Um das wieder herzustellen 'Wiederverkauf ‘Verzweigen Sie den Befehl'Git checkout' übergibt die HEAD-Zeigerreferenz mit der Index-ID - 4.Dies ist die Zeigerreferenz, als der Zweig 'preprod' erstellt wurde. Die lange Commit-ID wurde im Ausgabe-Screenshot hervorgehoben.

git checkout -b preprod HEAD @ {4}

Ausgabe

Und voila! „ Wiederverkauf Der Zweig wird mit Ihrem gesamten Quellcode wiederhergestellt.

HINWEIS :: Lass mich bFühren Sie den oben verwendeten Befehl 'git checkout' aus und helfen Sie Ihnen dabei, besser zu verstehen:

Der Befehl 'git checkout' ist ein überladener Befehl (genau wie jede überladene Java-Funktion). Dies ist der Teil, in dem der eigentliche Zweig wiederhergestellt wird.

Dieser einzelne Befehl überprüft zuerst den Zeitstempel des früheren Verlaufs, auf den der zeigt HEAD @ {4} Zeiger und erstellt dann mit der Option '-b' einen Zweig mit dem Namen 'preprod' und wechselt Ihr Arbeitsverzeichnis in den neu erstellten Zweig.

Dies bedeutet, dass der Zweig, der auf dem Ausgabebildschirm angezeigt wird, von „Master“ auf „Preprod“ umgeschaltet wird.Sie können es jetzt gemäß Ihrem Verzweigungsmodell mit 'Master' oder 'Release' zusammenführen.

Nachdem Sie nun wissen, wie ein Zweig wiederhergestellt wird, möchte ich Ihnen sagen, welche Arbeit wiederhergestellt wird, wenn ein gelöschter Zweig wiederhergestellt wird.

Welche Arbeit wird wiederhergestellt, wenn der gelöschte Zweig wiederhergestellt wird?

Die Dateien, die in der Stash-Index-Liste gespeichert und gespeichert wurden, werden wiederhergestellt. Nicht verfolgte Dateien gehen verloren. Auch ichEs ist eine gute Idee, Ihre Arbeit immer zu inszenieren und zu verpflichten oder sie zu verstauen.

Um die Protokollreferenzen eines bestimmten Zweigs oder Tags abzurufen, führen Sie den Befehl 'git reflog' aus.

Beispiel: Um nur die Protokollreferenzen des Zweigs 'uat' zu überprüfen, verwenden Sie den Befehl 'git reflog uat'.

Git Reflog-Unterbefehle

Reflog gehen

Befehl zum Öffnen der Handbuchseite

$ git reflog --help

Ausgabe

Reflog gehen Show

Zeigt die Protokolle der Referenz in der Befehlszeile an.

Git Reflog Show Master @ {0}

Reflog gehen verfallen

Dieser Befehl wird verwendet, um die älteren Reflog-Einträge zu bereinigen.

Git Reflog verfallen

Reflog gehen löschen

Dieser Befehl löscht einzelne Einträge aus dem Reflog-Verlauf.

Git Reflog löschen

Reflog gehen existiert

def __init __ (self):

Dieser Befehl prüft, ob eine Referenz (Zweig oder Tag) einen Reflog-Protokollverlauf enthält.

Git Reflog existiert

Abgesehen von den oben genannten Befehlen verwendet der Befehl 'Git Reflog' verschiedene Unterbefehle und verschiedene Optionen, abhängig von den oben genannten Unterbefehlen. Zur weiteren Lektüre „ Git Reflog - Hilfe ”Aus dem Terminalfenster.

Damit beenden wir diesen Artikel auf Git Reflog.Die Absicht von DevOps ist es, schneller und zuverlässiger Software von besserer Qualität zu erstellen und gleichzeitig eine bessere Kommunikation und Zusammenarbeit zwischen Teams zu ermöglichen. Wenn Sie von diesem Artikel fasziniert sind, c verdammt noch mal von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Der Edureka DevOps Certification Training-Kurs hilft den Lernenden, zu verstehen, was DevOps ist, und Fachwissen über verschiedene DevOps-Prozesse und -Tools wie Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack und GIT zu erwerben, um mehrere Schritte in SDLC zu automatisieren.

Hast du eine Frage an uns? Bitte erwähnen Sie es im Kommentarbereich des Artikels 'Git Reflog' und wir werden uns umgehend bei Ihnen melden.