Gibt git branch -d XYZ
es eine Möglichkeit, den Zweig wiederherzustellen, wenn ich ausgeführt werde ? Gibt es eine Möglichkeit, zurück zu gehen, als hätte ich den Befehl delete branch nicht ausgeführt?
git
branch
git-branch
prosseek
quelle
quelle
Antworten:
Ja, Sie sollten in der Lage sein,
git reflog
den SHA1 für das Commit an der Spitze Ihres gelöschten Zweigs zu findengit checkout [sha]
. Und sobald Sie bei diesem Commit sind, können Siegit checkout -b [branchname]
den Zweig einfach von dort aus neu erstellen.Dank an @Cascabel für diese komprimierte / einzeilige Version.
Sie können es in einem Schritt tun:
quelle
git checkout -b <branch> <sha>
.<sha>
. ZB wie oben erwähnt -git checkout -b <branch> <sha>
CMD+K
)git reflog --no-abbrev
diese Option , um die vollständige<sha>
Abkürzung anzuzeigen, die standardmäßig abgekürzt wird.git checkout remotes/origin/deleted_branch
.Die meisten unerreichbaren Commits befinden sich im Reflog. So ist das erste , was zu versuchen , am reflog suchen mit dem Befehl
git reflog
(der die reflog Anzeige fürHEAD
).Wenn das Festschreiben Teil eines bestimmten noch vorhandenen Zweigs war, ist es möglicherweise einfacher, den Befehl zu verwenden
git reflog name-of-my-branch
. Es funktioniert auch mit einer Fernbedienung, zum Beispiel, wenn Sie einen erzwungenen Druck ausüben (zusätzlicher Rat: Ziehen Sie stattdessen immer vorgit push --force-with-lease
, dass Fehler besser vermieden werden und besser wiederhergestellt werden können).Wenn sich Ihre Commits nicht in Ihrem Reflog befinden (möglicherweise weil sie von einem Drittanbieter-Tool gelöscht wurden, das nicht in das Reflog schreibt), habe ich einen Zweig erfolgreich wiederhergestellt, indem ich meinen Zweig mit einem solchen Befehl auf den sha des Commits zurückgesetzt habe erstellt eine Datei mit allen baumelnden Commits):
Wenn Sie es mehrmals verwenden sollten (oder es irgendwo speichern möchten), können Sie mit diesem Befehl auch einen Alias erstellen ...
und benutze es mit
git rescue
Um gefundene Commits zu untersuchen, können Sie jedes Commit mithilfe einiger Befehle anzeigen, um sie zu untersuchen.
So zeigen Sie die Festschreibungsmetadaten an (Autor, Erstellungsdatum und Festschreibungsnachricht):
Um auch die Unterschiede zu sehen:
Wenn Sie Ihr Commit gefunden haben, erstellen Sie einen Zweig für dieses Commit mit:
Für diejenigen, die unter Windows arbeiten und GUIs mögen, können Sie Commits (und auch nicht festgeschriebene bereitgestellte Dateien) mit GitExtensions mithilfe der Funktion
Repository
=>Git maintenance
=> problemlos wiederherstellenRecover lost objects...
Ein ähnlicher Befehl zum einfachen Wiederherstellen von gelöschten bereitgestellten Dateien: https://stackoverflow.com/a/58853981/717372
quelle
Wenn Sie eine GUI verwenden möchten, können Sie den gesamten Vorgang mit gitk ausführen.
Auf diese Weise können Sie den Festschreibungsverlauf des Zweigs anzeigen, als wäre der Zweig nicht gelöscht worden. Klicken Sie nun einfach mit der rechten Maustaste auf das letzte Commit für den Zweig und wählen Sie die Menüoption
Create new branch
.quelle
Die am besten gewählte Lösung bietet tatsächlich mehr als gewünscht:
oder
Verschieben Sie Sie zusammen mit allen letzten Änderungen, die Sie möglicherweise vergessen haben, zu übernehmen, in den neuen Zweig. Dies ist möglicherweise nicht Ihre Absicht, insbesondere wenn Sie sich nach dem Verlust des Zweigs im "Panikmodus" befinden.
Eine sauberere (und einfachere) Lösung scheint der Einzeiler zu sein (nachdem Sie die
<sha>
mit gefunden habengit reflog
):Jetzt sind weder Ihre aktuelle Niederlassung noch nicht festgeschriebene Änderungen betroffen. Stattdessen wird nur ein neuer Zweig bis zum erstellt
<sha>
.Wenn es nicht der Tipp ist, funktioniert es immer noch und Sie erhalten einen kürzeren Zweig. Sie können es dann mit einem neuen
<sha>
und neuen Zweignamen wiederholen, bis Sie es richtig verstanden haben.Schließlich können Sie den erfolgreich wiederhergestellten Zweig in den Namen oder einen anderen Namen umbenennen:
Unnötig zu erwähnen, dass der Schlüssel zum Erfolg darin bestand, das richtige Commit zu finden. Nennen Sie
<sha>
Ihre Commits also mit Bedacht :)quelle
Zusätzlich zu TFE Antwort : auch das ist git-resurrect.sh im Skript
contrib/
Bereich der Git - Quellen (in git.git Repository), die Ihnen helfen können.quelle
Ich habe die folgenden Befehle verwendet, um meinen gelöschten Zweig zu finden und abzurufen. Die ersten Schritte stammen aus der Beschreibung von gcb.
Suchen Sie nun anhand der Commit-Kommentare nach der Git-Commit-ID (GIT-SHA) und verwenden Sie sie im folgenden Befehl. Kasse einer neuen Filiale namens NEW-BRANCH mit dem zuvor gefundenen GIT-SHA:
quelle
Wenn Sie kein Reflog haben, z. Da Sie in einem nackten Repository arbeiten, in dem das Reflog nicht aktiviert ist und das Commit, das Sie wiederherstellen möchten, kürzlich erstellt wurde, besteht eine weitere Option darin, kürzlich erstellte Commit-Objekte zu finden und diese zu durchsuchen.
Aus dem
.git/objects
Verzeichnis heraus ausführen:Dadurch werden alle Objekte (Commits, Dateien, Tags usw.) gefunden, die in den letzten 12 Stunden erstellt wurden, und gefiltert, um nur Commits anzuzeigen. Das Überprüfen dieser ist dann ein schneller Prozess.
Ich würde jedoch zuerst das in Jakubs Antwort erwähnte Skript git-ressurect.sh ausprobieren .
quelle
man find
: "-ctime n - Der Status der Datei wurde zuletzt vor n * 24 Stunden geändert." Wir sollten also auch 12 auf 0,5 ändern, um das erwartete Verhalten der letzten 12 Stunden zu erreichen.Für GitHub- Benutzer ohne installierten Git:
Wenn Sie es von der GitHub- Website wiederherstellen möchten , können Sie deren API verwenden , um eine Liste der Repo-bezogenen Ereignisse abzurufen:
Zuerst
Finden Sie diese SHAs (Commit-Hashes):
curl -i https://api.github.com/repos/PublicUser/PublicRepo/events
... oder für private Repos:
curl -su YourUserName https://api.github.com/repos/YourUserName/YourProject/events
(wird zur Eingabe des GitHub-Passworts aufgefordert)
Nächster
• Gehen Sie zu Zweigen und löschen Sie diesen.
• Öffnen Sie auf derselben Seite ohne erneutes Laden das Bedienfeld DevTools, Netzwerk. Jetzt vorbereiten ...
• Klicken Sie auf Wiederherstellen. Sie werden eine neue "Linie" bemerken. Klicken Sie mit der rechten Maustaste darauf und wählen Sie "Als cURL kopieren" und speichern Sie diesen Text in einem Editor.
• Fügen Sie am Ende der kopierten Codezeile Folgendes hinzu :
-H "Cookie="
.Sie sollten jetzt etwas bekommen wie:
Letzter Schritt
PS
Mir ist klar, dass dies möglicherweise nicht die "einfachste Lösung" oder die "richtige" Lösung ist, aber es wird angeboten, falls jemand es nützlich findet.
quelle
git reflog
und das daher nützlich war, wenn beispielsweise ein Remote-Zweig gelöscht und der Zugriff auf den Computer verloren wurde, von dem aus nichts Nützliches erkältet werden konntereflog
. Beachten Sie, dass bei Verwendung der OAuth- oder Zwei-Faktor-Authentifizierung auf Github dercurl
Befehl die folgende Form hat:curl -u username:token https://api.github.com/user
odercurl -H "Authorization: token TOKEN" https://api.github.com/repos/USER_OR_ORG_NAME/REPO_NAME/events
Wenn der zu löschende Zweig von einem anderen Zweig erreicht werden kann, können Sie ihn meines Wissens sicher mit löschen
und deine Arbeit geht nicht verloren. Denken Sie daran, dass ein Zweig kein Schnappschuss ist, sondern ein Zeiger auf einen. Wenn Sie also einen Zweig löschen, löschen Sie einen Zeiger.
Sie verlieren nicht einmal Arbeit, wenn Sie einen Zweig löschen, der von einem anderen nicht erreicht werden kann. Natürlich ist es nicht so einfach wie das Auschecken des Commit-Hashs, aber Sie können es trotzdem tun. Aus diesem Grund kann Git keinen Zweig löschen, der mit nicht erreicht werden kann
-d
. Stattdessen müssen Sie verwendenDies ist Teil eines unverzichtbaren Videos von Scott Chacon über Git. Überprüfen Sie Minute 58:00, wenn er über Zweige spricht und wie sie gelöscht werden.
Einführung in Git mit Scott Chacon von GitHub
quelle
reflog
sind einfach übertrieben.Stellen Sie sicher, dass Sie dies alles lokal ausführen, und vergewissern Sie sich, dass sich Ihr Repo in dem gewünschten Zustand befindet, bevor Sie zu Bitbucket Cloud wechseln. Es kann auch eine gute Idee sein, Ihr aktuelles Repo zu klonen und diese Lösungen zuerst zu testen.
2.Um den Zweig wiederherzustellen, verwenden Sie:
Wenn Sie das 'sha' auf der Oberseite Ihres Kopfes nicht kennen, können Sie:
Wenn Ihre Commits nicht in Ihrem Reflog enthalten sind:
2.Sie können dann jedes Commit mit einer der folgenden Optionen anzeigen:
quelle
Um einen gelöschten Zweig wiederherzustellen, gehen Sie zunächst den Reflog-Verlauf durch.
Wobei n sich auf die letzten n Commits bezieht. Dann finden Sie den richtigen Kopf und erstellen Sie einen Zweig mit diesem Kopf.
quelle
Ich habe einen Zweig von der Fernbedienung neu gestartet, um zu versuchen, ein paar Commits zu löschen, die ich nicht wollte, und wollte die richtigen auswählen, die ich wollte. Natürlich habe ich die SHAs falsch geschrieben ...
Hier ist, wie ich sie gefunden habe (meistens eine einfachere Schnittstelle / Interaktion von Dingen auf Antworten hier):
Generieren Sie zunächst eine Liste mit losen Commits in Ihrem Protokoll. Tun Sie dies so schnell wie möglich und hören Sie auf zu arbeiten, da diese möglicherweise vom Müllsammler entsorgt werden.
Dadurch wird eine
lost
Datei mit allen Commits erstellt, die Sie anzeigen müssen. Um unser Leben zu vereinfachen, schneiden wir nur die SHA daraus:Jetzt haben Sie eine
commits
Datei mit allen Commits, die Sie suchen müssen.Angenommen, Sie verwenden Bash, der letzte Schritt:
Dies zeigt Ihnen die Diff- und Commit-Informationen für jeden von ihnen. Und warten Sie, bis Sie drücken Enter. Schreiben Sie nun alle gewünschten auf und wählen Sie sie aus. Wenn Sie fertig sind, drücken Sie einfach Strg-C.
quelle
GROSSES JA
Wenn Sie GIT verwenden, führen Sie die folgenden einfachen Schritte aus: https://confluence.atlassian.com/bbkb/how-to-restore-a-deleted-branch-765757540.html
Wenn Sie Smartgit verwenden und diesen Zweig bereits zum Ursprung verschieben, suchen Sie diesen Zweig und klicken Sie mit der rechten Maustaste und dann zur Kasse
quelle
Gehen Sie zuerst zu git batch, um zu Ihrem Projekt zu wechseln, wie:
Sie alle haben eine Liste der Änderungen und die Referenznummer nehmen Sie die Ref-Nummer und
checken Sie dann aus Android Studio oder von der Git Betcha. eine andere lösung nimm die ref nummer und gehe zu android studio klicke auf git branchs down und dann auf checkout tag oder revision nach der referenznummer dann lol du hast die branches.
quelle
Wenn Sie die Antwort von tfe ergänzen, können Sie mit diesem erwähnten Prozess eine Wiederherstellung durchführen, es sei denn, die Commits werden nicht durch Müll gesammelt. Der Git-Zweig ist einfach ein Zeiger auf ein bestimmtes Commit im Commit-Baum. Wenn Sie jedoch den Zeiger löschen und die Commits in diesem Zweig nicht mit einem anderen vorhandenen Zweig zusammengeführt werden, behandelt git ihn als baumelnde Commits und entfernt sie während der Speicherbereinigung, die möglicherweise automatisch regelmäßig ausgeführt wird.
Wenn Ihr Zweig nicht mit einem vorhandenen Zweig zusammengeführt wurde und wenn Müll gesammelt wurde, verlieren Sie alle Commits bis zu dem Punkt, an dem der Zweig von einem vorhandenen Zweig getrennt wurde.
quelle
Ein verwandtes Problem: Ich bin auf diese Seite gekommen, nachdem ich nach "Wie man weiß, was gelöschte Zweige sind" gesucht habe.
Beim Löschen vieler alter Zweige hatte ich das Gefühl, versehentlich einen der neueren Zweige gelöscht zu haben, wusste aber nicht, wie ich ihn wiederherstellen sollte.
Gehen Sie wie folgt vor, um zu erfahren, welche Zweige kürzlich gelöscht wurden:
Wenn Sie zu Ihrer Git-URL gehen, sieht diese ungefähr so aus:
Dann können Sie den Feed sehen, was von wem in der jüngeren Vergangenheit gelöscht wurde.
quelle
Ich habe dies auf dem Computer gemacht, auf dem ich den Zweig lösche:
git reflog
Antwort:
und ich rufe den Zweig mit diesem Befehl ab:
git checkout -b newBranchName 74b2383
quelle
Nur mit
git reflog
hat dassha
für mich nicht zurückgegeben. Nur diecommit id
(die 8 Zeichen lang ist und ein sha ist viel länger)Also habe ich benutzt
git reflog --no-abbrev
Und dann machen Sie dasselbe wie oben erwähnt:
git checkout -b <branch> <sha>
quelle
WENN Sie VSCode verwenden ... und Ihren Zweig irgendwann mit dem Server synchronisiert haben, bevor Sie ihn löschen ...
Beachten Sie, dass git branch delete nur die lokale Kopie löscht, nicht die Kopie auf dem Server. Sehen Sie sich zunächst im Git-Bereich (Git-Symbol in der linken Symbolleiste) die Zweige an und prüfen Sie, ob sich Ihr Zweig noch unter "origin / your_branch_name" befindet. Wenn ja, wählen Sie das einfach aus und Sie sollten Ihren Code zurückerhalten (schlagen Sie vor, dass Sie ihn sofort kopieren / einfügen / lokal an einem anderen Ort speichern).
Wenn Sie keinen "origin / your_branch_name" gesehen haben, installieren Sie die GitLens-Erweiterung. Auf diese Weise können Sie visuell in den Server-Repositorys stöbern und die Kopie suchen, die Sie mit dem Server synchronisiert haben. Wenn Sie mehrere Repositorys haben, beachten Sie, dass möglicherweise mindestens eine Datei aus dem gewünschten Repository geöffnet werden muss, damit das Repository in GitLens angezeigt wird. Dann:
Öffnen Sie das GitLens-Bedienfeld
Erweitern Sie das Repository
Sie sollten eine Liste von Kategorien sehen: Zweige / Mitwirkende / Fernbedienungen / Verstecke / etc.
Sie sollten YourLostTreasure unter "Zweige" oder möglicherweise unter "Fernbedienungen -> Ursprünge" finden. Hoffentlich sehen Sie einen Zweig mit dem gewünschten Namen. Wenn Sie ihn erweitern, sollten Sie die Dateien sehen, die Sie in diesem Zweig geändert haben. Doppelklicken Sie auf die Dateinamen, um sie zu öffnen, und sichern Sie diesen Code sofort.
Wenn Sie Ihren verlorenen Zweig nicht sofort sehen, stöbern Sie herum und wenn Sie etwas Vielversprechendes finden, öffnen Sie ihn sofort und holen Sie sich den Code. Ich musste einiges herumstöbern, bis ich TheGoldenBranch gefunden hatte, und selbst dann fehlten dem Code die letzten ein oder zwei Speicherungen (möglicherweise, weil ich nicht mit dem Server synchronisiert werden konnte, bevor ich versuchte, eine Zweigstelle zusammenzuführen, aber versehentlich zu klicken). Branch-Delete). Meine Suche wurde unnötig verlängert, da ich beim ersten Auffinden des Zweigs nicht ganz sicher war, ob der Name korrekt war. Ich suchte also weiter und es dauerte einige Zeit, bis ich diesen ersten Zweig wiedergefunden hatte. (Also Carpe Carpum und dann weiter suchen.)
quelle