Bitte, ich habe ein großes Problem in meinem Projekt: Dies ist das Szenario. Ich habe ein Xcode-Projekt unter GIT. Heute habe ich festgestellt, dass das letzte Commit einige Tests gebrochen hat, also habe ich das vorherige Commit überprüft. Ich habe SourceTree verwendet und dies ist die Warnung
Wenn Sie dies tun, wird Ihre Arbeitskopie zu einem "abgetrennten KOPF", was bedeutet, dass Sie sich nicht mehr in einem Zweig befinden. Wenn Sie danach ein Commit durchführen möchten, möchten Sie wahrscheinlich entweder einen Zweig erneut auschecken oder einen neuen Zweig erstellen. Ist das ok?
Ich habe einen ganzen Tag gearbeitet und am Ende alles getan. Also musste ich meine Arbeit am Entwicklungszweig zusammenführen, damit ich den Entwicklungszweig auscheckte und ... meine Arbeit verschwand sofort :(
Ich weiß, dass es falsch war, meinen KOPF abzunehmen, und Sourcetree hat mich gewarnt ... aber gibt es eine Möglichkeit, meine Arbeit wiederherzustellen?
Antworten:
Wenn Sie eingeben
git reflog
, wird Ihnen der Verlauf der RevisionenHEAD
angezeigt, auf die verwiesen wurde. Ihr losgelöster Kopf sollte dort drin sein. Wenn Sie es gefunden haben, tun Siegit checkout -b my-new-branch abc123
odergit branch my-new-branch abc123
(woabc123
ist der SHA-1 des abgetrennten KOPFES), um einen neuen Zweig zu erstellen, der auf Ihren abgetrennten Kopf zeigt. Jetzt können Sie diesen Zweig nach Belieben zusammenführen.Wenn Sie einen Zweig nach der Arbeit an einem abgetrennten Kopf auschecken, sollte Git Ihnen im Allgemeinen das Commit von dem abgetrennten Kopf mitteilen, auf dem Sie sich befunden haben, damit Sie ihn bei Bedarf wiederherstellen können. Ich habe SourceTree noch nie verwendet, daher weiß ich nicht, ob es diese Nachricht weiterleitet. Wenn diese Nachricht jedoch angezeigt wurde, sollten Sie sie verwenden können, um das Commit zu finden, und erneut einen Zweig aus diesem Commit verwenden
git checkout -b
odergit branch
erstellen.quelle
fatal: A branch named 'mybranch' already exists.
Wie in bestehenden Zweig hinzufügen?git cherry-pick e5b2f7b
, woe5b2f7b
sich der SHA-1 des Commits dort befindet.In Sourcetree können Sie dies über die GUI tun.
Suchen Sie zuerst das "verlorene" Commit, indem Sie im Befehlsverlauf nach einer Nachricht suchen (Ansicht: Befehlsausgabe anzeigen). Es wird wahrscheinlich im Befehl "Switching Branch" nach dem Commit sein, das Sie verloren haben. In dieser Nachricht wird hoffentlich der Festschreibungskommentar mit einer Festschreibungs-ID von 1234567 angezeigt.
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!
quelle
Wenn Sie keine Änderungen am getrennten HEAD beibehalten möchten und zum neuesten Branch Commit wechseln möchten, verwenden Sie den folgenden Befehl direkt.
Hinweis: Ich werde alle Ihre Änderungen im abgetrennten HEAD löschen.
quelle
Ein Kollege von mir hatte gerade diese Situation. In seinem Fall gab es Commits in losgelöstem Kopf - sie arbeiten in R-Studio - und das Tool warnte sie, dass sie den Zweig mit dieser und jener SHA-Referenz erstellen könnten ... aber da die einzige Option "Schließen" war. --duh !! Es war eine Infobox - sie schlossen den Dialog und verloren die Informationen für immer ...
Dank des
reflog
Befehls konnten wir sehen, dass die Änderungen nicht verloren gingen. Aber in unserem Fall hat dasgit branch
nicht wie erwartet funktioniert ... oder ein Einganggit pull
hat es irgendwie durcheinander gebracht. Wir mussten die Änderungen vom Reflog zum neu erstellten Zweig fischen:das platzierte alle Commits, die wir in der Niederlassung wollten. Dann könnten wir den Zweig
develop
ohne Probleme zusammenführen.Nur für den Fall, dass dies für irgendjemanden informativ ist, haben wir die Commits auf dem abgetrennten Kopf in der identifiziert, indem wir uns
reflog
die zwischen den mit "checkout" gekennzeichneten Commits angesehen haben (die die Zweigverschiebung identifizieren):Diejenigen , wollten wir waren
HEAD@{8}
aufHEAD@{6}
(beide inklusive). Also haben wir sie bekommen von:Dann ließen uns die üblichen Zusammenführungslösungen und das endgültige Festschreiben mit branch lost_changes zurück, in denen die Arbeit mit losgelöstem Kopf gehostet wurde, die wir für verloren hielten. Diesmal war es ein schneller Vorlauf, dies in die Entwicklung zu integrieren.
quelle
Ich habe dieses Szenario ausprobiert und finde, dass Git mir SHA-1 vom letzten Commit erzählt:
Hast du diese Nachricht gesehen?
quelle
git reflog
sollte Ihnen zeigen, was Sie brauchen.Abgenommener Kopf ist in Ordnung, solange Sie keine Änderung vornehmen möchten.
Wenn Sie ein Commit zurücksetzen möchten, können Sie git revert für einen bestimmten Zweig verwenden
Wenn Sie den abgetrennten Kopf abarbeiten und Commits ausführen möchten; Erstellen Sie einen neuen Zweig (und führen Sie ihn später zusammen).
quelle
git reflog
den Verlauf aus.git checkout -b temp e35d2b3
Wechseln Sie hier zu Ihrem gewünschten Commit. E35dd23 ist der Hash-Wert Ihres Commits.Akzeptieren Sie es als Antwort, wenn es Ihr Problem löst. Ansonsten teilen Sie bitte Ihren Kommentar.
quelle