Das ist, was passiert ist:
Ich habe einen Zweig A. Auf Zweig AI hat eine Reihe von Änderungen vorgenommen. Ich war mit dem Code nicht zufrieden, also habe ich das vorherige Commit in Zweig A überprüft. Dann habe ich eine Reihe weiterer Änderungen vorgenommen und sie in Zweig A festgeschrieben. Jetzt kann ich dieses Commit nirgendwo finden. Habe ich diesen Code verloren?
git reset
eher alsgit checkout
?HEAD
und Zweig A wäre beim vorherigen Festschreiben geblieben. Welche Befehle haben Sie genau ausgeführt?Antworten:
Das alte Commit befindet sich noch im Reflog.
Daraufhin wird eine Liste der Commits angezeigt, und das "verlorene" Commit sollte sich dort befinden. Sie können es in einen neuen Zweig machen. Wenn der SHA-1 beispielsweise ba5a739 ist, können Sie beim alten Commit einen neuen Zweig mit dem Namen "new-branch" erstellen mit:
Beachten Sie, dass "verlorene" Commits gelöscht werden, wenn die Datenbank bereinigt wird.
quelle
git cherry-pick [SHA]
, um das Commit auf einen vorhandenen Zweig zu verschieben, falls Sie versehentlich ein Commit durchgeführt haben, während Sie sich im Status eines getrennten Kopfes befindenprune
auch getrennte Commits löschen würde, auf die in Commit-Nachrichten verwiesen wird? Oder macht das sie erreichbar ?Wie bereits erwähnt, sind Ihre Commits weiterhin im Reflog verfügbar. Zusätzlich zu den anderen Antworten haben Sie folgende Möglichkeiten, die getrennten HEAD-Commits direkt in Ihren aktuellen Zweig zu übernehmen , ohne einen neuen Zweig zu erstellen und zusammenzuführen:
Schlagen Sie die SHA-1-Hashes der Commits nach, mit denen Sie im getrennten HEAD-Status ausgeführt haben
Führen Sie dann alle Commit-Hashes aus, die vom ältesten zum neuesten sortiert sind:
Zum Beispiel, wenn ich nur eines hätte, das im kurzen Hash-Format "erste 7 Zeichen" angegeben ist:
Dadurch werden neue Commits für Ihren aktuellen Zweig erstellt, ein Commit pro getrenntem HEAD-Commit-Hash, den Sie im Befehl erwähnen. Es übernimmt auch die ursprünglichen Festschreibungsnachrichten.
quelle
Mit dem folgenden Befehl können Sie verlorene (baumelnde) Commits finden:
Beachten Sie, dass Ihr aktueller Kopf, wenn er festschreibt, nicht als verloren aufgeführt wird.
Weitere Informationen finden Sie unter git-fsck (1) Manual Page
Dann können Sie einen Zweig für dieses verlorene Commit erstellen:
quelle
Die Git-Sprache für den Status Ihres Arbeitsverzeichnisses ist ein " losgelöster HEAD ". Hier ist ein weiterer Ort, an
git reflog
dem gespart wird.Wenn ich versuche, einen anderen Zweig auszuchecken, gibt git-1.7.5.1 einen hilfreichen Vorschlag.
quelle
Sie haben es nicht verloren, Git behält immer noch eine Kopie (aber es ist derzeit für keinen Zweigkopf erreichbar). Sie können Ihr fehlendes Commit mit dem
git reflog
Befehl finden. Das Reflog verfolgt die historischen Positionen eines Zweigkopfs, und Sie können es verwenden, um Dinge zu finden, auf die der Zweigkopf zuvor gezeigt hat.quelle
Befolgen Sie diese Schritte, um Ihren abgetrennten Kopf wieder mit Git Repo zu verbinden
git checkout "your branch with path but without remote name"
zB wenn der entfernte Name der Ursprung ist und der Name des Zweigs
bugfix/somebranch
verwendet wirdgit checkout bugfix/somebranch
git reflog
Rufen Sie die Commit-SHAs aus Ihrer Commit-Liste des getrennten Zweigs auf.git cherry-pick "commit hash1" "commit hash2" "commit hash3"
git push
ALLES BEREIT!!
quelle
In Sourcetree habe ich festgestellt, dass das Git-Reflog nicht funktioniert, also habe ich über die GUI herausgefunden, wie das geht.
Versuchen Sie zunächst, das "verlorene" Commit zu finden, indem Sie im Befehlsverlauf nach einer Nachricht suchen (Ansicht: Befehlsausgabe anzeigen). Es befindet sich hoffentlich im Befehl "Switching Branch" nach dem Commit, den Sie verloren haben, und Sie sehen den Commit-Kommentar mit einer Commit-ID von 1234567.
Nehmen Sie diese Commit-ID mit dem nächsten Schritt.
Klicken Sie auf die Schaltfläche "Verzweigen" in der oberen Symbolleiste und Sie sollten ein Dialogfeld "Neuer Zweig" erhalten, in dem Sie ein bestimmtes Commit angeben können. Geben Sie diese Commit-ID dort ein, geben Sie einen neuen Zweigstellennamen an, klicken Sie auf Zweig erstellen und Sie sollten einen neuen Zweig mit Ihrem verlorenen Commit erhalten!
Dies brachte mir verlorene Arbeit zurück!
quelle