Git: schien in "(kein Zweig)" zu sein und verlor dann meine Änderungen


11

Ich habe versucht, von meinem Git-Arbeitsbereich auf Github zuzugreifen, aber meine hinzugefügten und festgeschriebenen Änderungen schienen nicht hochgeladen zu werden.

Als ich dann einen "Git-Zweig" machte, bekam ich etwas, das so aussah:

git branch
* (no branch)
  master

Dummerweise dachte ich, ich könnte wieder mit dem Meister anfangen

git checkout master

und jetzt scheinen meine Veränderungen verschwunden zu sein. Mein Hauptzweig ist ungefähr einen Tag alt. Und es scheint keine Möglichkeit zu geben, darauf zurückzugreifen (kein Zweig).

Sind meine Änderungen verloren? Oder gibt es eine Möglichkeit, sie wiederherzustellen?

Antworten:


12

Solange Sie keine gemacht haben git gc, haben Sie nichts verloren. Alles was Sie tun müssen, ist es wieder zu finden :) Was bekommen Sie mit:

git reflog show

Das sollte Ihnen zeigen, was passiert ist und die ID der fehlenden Knoten.


2
Ich würde Git Reflog machen, ohne den Master anzugeben. Es ist möglich, Commits zu haben, die nicht an einen Zweig gebunden sind, und in diesem Fall ist dies wahrscheinlich der Fall. Sie können ein Commit in einen neuen Zweig auschecken, damit dieser einen Pfad dazu hat.
Jeff Ferland

Du hast recht, wahrscheinlich besser so. Meine Annahme aus der Frage war gewesen, dass es für das Commit auf Master war. Ich habe meine Antwort aktualisiert.
CK.

Puh, danke! Ich habe einen riesigen Vorrat an keinen Zweig übergeben, dann zum Master gewechselt, um ihn zusammenzuführen ... und meine Referenz war weg.
Pascal

Es ist ziemlich viele Jahre her, aber auch ich bin darauf eingegangen. Ich wechselte zurück zum Hauptzweig und plötzlich zum Kotzen. Alle meine 2 Arbeitstage (dh 8 Stunden pro Tag) sind vergangen. Ich danke dir sehr!
Falgantil

5

Die obige Antwort ist richtig. Das habe ich getan:

$ git reflog
5b35f6d HEAD@{1}: pull github master: Fast forward
ca92d15 HEAD@{2}: checkout: moving from 759dab1b15731ce7680c26839ca470d20e709e36 to master
759dab1 HEAD@{3}: commit (merge): Merge branch 'master' of github.com:gonzojive/IODB-ui into HEAD
065e269 HEAD@{4}: commit: added fieldsets to snazzy form
f357606 HEAD@{5}: commit: preliminary support for google maps.
ca92d15 HEAD@{6}: checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

$ git checkout ca92d15d272867b63d54f96d4aa57f8ecc479cd0

Das "Oh nein!" Moment ist dies:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 ist der anonyme Zweig, der als (kein Zweig) angezeigt wird. Um darauf zurückzukommen, machen Sie einfach eine Git-Kasse und Ihre alte Pseudobranch wird wiederhergestellt.

Ich empfehle, Ihr Git-Repository zu sichern, bevor Sie es versehentlich überprüfen, nur um die Sicherheit zu gewährleisten.


Das einfache Auschecken der Filiale hat bei mir nicht funktioniert. Meine Änderungen wurden in meinem Feature-Zweig korrekt vorgenommen. Trotzdem konnte ich sie in meinem Arbeitsbereich nicht sehen. Ich muss meine Veränderungen auf eine andere Weise verloren haben. Ich konnte meine Änderungen jedoch durch Ausführen wiederherstellen git reset --hard <commit-id>. Die Commit-ID ist der alphanumerische Code in der ersten Spalte von git reflog. Siehe effectif.com/git/recovering-lost-git-commits .
Torsten

2
# if you have already checked out to master, 
# you won't know the commit-ish of your "no branch":

git fsck --lost-found # (to find your <commit-ish>)
git merge <commit-ish>

# if you are still on your "no branch" commit:

git log # (the commit-ish will be on the first line)
git checkout master
git merge <commit-ish>

# or

git log | head -n 1 | cut -d ' ' -f 2 | pbcopy
git checkout master
git merge <commit-ish>

Von vielen Möglichkeiten, einschließlich der Rev-Liste, hat nur fsck geholfen, ein Commit ohne Zweig zu finden. Vielen Dank.
Temoto
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.