Behält github gelöschte Remote Branches im Verlauf? Wenn ja, können diese wiederhergestellt werden?
Lesezeit: 4 Minuten
Ich habe mich gefragt, ob es eine Möglichkeit gibt, einen entfernt gelöschten Zweig in GitHub wiederherzustellen. Der Verlauf zeichnet den Zweig eindeutig auf und führt ihn mit anderen Zweigen zusammen, aber ich bin mir nicht sicher, ob es möglich ist, einen gelöschten Zweig wiederherzustellen.
Danke.
Autobahn des Lebens
Ja, es ist möglich, einen gelöschten Zweig von git wiederherzustellen.
Finden Sie Ihre Commit-ID: Suchen Sie mithilfe von git reflog nach einem Branch
Wenn Sie den Zweig in den letzten 30 Tagen in Ihrem lokalen Git-Repo hatten, können Sie dies möglicherweise tun finden Sie es im Reflog mit folgendem:
git reflog
Suchen Sie im Reflog nach dem Zweignamen und notieren Sie sich die HEAD{x} Punkt oder die Commit-ID.
Erstellen Sie den Zweig vom Reflog-HEAD-Punkt neu:
git checkout -b branch_name HEAD@{27}
Erstellen Sie den Branch aus der Commit-ID neu:
Sie können die Commit-ID auschecken und einen Branch von diesem Commit-Punkt erstellen:
git checkout -b branch_name <commit id>
Dies löst nicht das Problem des OP. Alles, was Sie tun, ist, einen Umweg zu erklären, um herauszufinden, welches Commit Sie gerade ausgecheckt haben (ob es sich auf einem Zweig befindet oder nicht). Wenn die gelöschten Remote-Zweige nicht auf HEAD verweisen, ist dies nicht hilfreich. Sie könnten vielleicht weiter hinten in den Reflogs stehen, wenn Sie sie sich jedoch irgendwann ansehen.
– Kaskabel
13. Januar 2011 um 3:47 Uhr
@Jefromi, dies ist die Methode zum Wiederherstellen eines gelöschten Zweigs, egal ob er weiter hinten oder am Kopf liegt, Sie stellen ihn immer noch auf die gleiche Weise wieder her.
– Autobahn des Lebens
13. Januar 2011 um 19:33 Uhr
Es ist … irgendwie. Es ist etwas durcheinander. Sie wirklich verwenden möchten reflog gefolgt von git branch <branch-name> <commit>. (Dort fehlt ein Argument). Wenn Sie aus irgendeinem seltsamen Grund den ursprünglichen Zweig nicht wirklich zurückbekommen möchten, sondern einfach weitermachen und ihn in Ihr aktuelles Commit einbinden möchten, dann ja, das könnten Sie git checkout -b <branch-name>; git merge <commit>. Ich weiß aber nicht, warum das dein Standardvorschlag sein sollte.
– Kaskabel
13. Januar 2011 um 20:27 Uhr
Übersehe ich etwas?? Ich glaube nicht, dass diese Antwort die Frage “irgendwie” beantwortet. git reflog wird zeigen KOPF‘s Geschichte. Sie müssen das nach Vorkommen des Gelöschten suchen foo sich verzeigen. “HEAD@{0}” zu finden, hilft überhaupt nicht. Siehe meine Antwort unten.
Es ist möglich, nach GitHub-Support zu fragen und sie sich das ansehen zu lassen reflog Ihres Remote-Repos (wie zum Beispiel in diesem Thread).
Wenn dies nah genug ist (standardmäßig weniger als 30 Tage) ab dem Löschen, enthält das Reflog immer noch die Commits, die von keinem Zweig mehr referenziert werden.
Das Erstellen einer Verzweigung auf einem dieser Commits ermöglicht es, dass sie wieder zugänglich sind.
Aktualisieren: Der Repo-Eigentümer kann auch die GitHub-EVents-API abfragen:
Siehe „Erinnert sich GitHub an Commit-IDs?“
Wenn der Branch sehr lange gelöscht wurde (in meinem Fall 1 Jahr), Sie aber einen Pull-Request für diesen Branch geöffnet hatten, können Sie ihn möglicherweise wiederbeleben, indem Sie im Pull-Request-Verlauf suchen.
Sobald ich die Pull-Anforderung für diesen Zweig gefunden hatte, konnte ich den Zweig wiederherstellen. Relevante Commit-Informationen usw. sind auch aus dem Pull-Request verfügbar.
Meine Zweiglöschung ist älter als 30 Tage – 8 Monate in der Tat, gibt es eine Möglichkeit, sie wiederherzustellen? Ich konnte wie erwartet nichts im Reflog finden und ich habe keine Pull-Anfrage dafür.
– C.Dhruv
29. Juni 2020 um 8:01 Uhr
git reflog zeigt Ihnen die Geschichte von HEAD. Wenn der von Ihnen gelöschte Zweig benannt wurde foodann sollten Sie in dieser Ausgabe Zeilen wie sehen 48534f5 HEAD@{0}: checkout: moving from master to foo oder 48534f5 HEAD@{1}: merge foo: Fast-forward. Sie können die Ausgabe von durchsuchen git reflog um herauszufinden, welches Commit das letzte sein muss, auf das foo gezeigt hat.
Beachten Sie, dass die Reflog-Datei “foo” selbst gelöscht wird, wenn foo gelöscht wurde, aber da das Reflog von HEAD anders ist, existiert es immer noch.
Ich habe es erstellt, um Ereignisse abzurufen und sie lesbar zu machen. Sie können es an grep weiterleiten und nach dem Zweig suchen, an dem Sie interessiert sind. Wenn genügend Verlauf vorhanden ist, sehen Sie das Löschereignis für den betreffenden Zweig, die nächste Zeile wird sein das letzte Push-Ereignis und das ist das Sha, an dem Sie interessiert sind.
piersb
Es ist ein bisschen umständlich, aber hier ist, wie es geht.
Holen Sie sich ein neues persönliches Zugriffstoken unter Profil / Einstellungen / Entwicklereinstellungen / Persönliche Zugriffstoken, falls Sie noch keines haben.