Gibt es eine Möglichkeit, nicht übertragene Änderungen am Arbeitsverzeichnis aus einer git reset --hard HEAD
?
Antworten
Zu viele Anzeigen?Antwort hierauf SO
$ git reflog show
4b6cf8e (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: reset: moving to origin/master
295f07d HEAD@{1}: pull: Merge made by the 'recursive' strategy.
7c49ec7 HEAD@{2}: commit: restore dependencies to the User model
fa57f59 HEAD@{3}: commit: restore dependencies to the Profile model
3431936 HEAD@{4}: commit (amend): restore admin
033f5c0 HEAD@{5}: commit: restore admin
ecd2c1d HEAD@{6}: commit: re-enable settings app
# assuming you want to get back to 7c49ec7 (restore dependencies to the User model)
$ git reset HEAD@{2}
Du hast deinen Tag zurück! :)
Sie kann nicht unbestätigte Änderungen im Allgemeinen zurückholen.
Zuvor gestaffelte Änderungen ( git add
) sollte aus Indexobjekten wiederhergestellt werden können; wenn dies der Fall ist, verwenden Sie git fsck --lost-found
um die zugehörigen Objekte zu finden. (Dadurch werden die Objekte in die Datei .git/lost-found/
Verzeichnis; von dort aus können Sie mit git show <filename>
um den Inhalt der einzelnen Dateien zu sehen).
Wenn nicht, lautet die Antwort: Schauen Sie sich Ihr Backup an. Vielleicht speichert Ihr Editor/IDE temporäre Kopien unter /tmp oder C:\TEMP und dergleichen.[1]
git reset HEAD@{1}
Dadurch wird der vorherige HEAD wiederhergestellt
[1] vim speichert z.B. optional eine dauerhafte Rückgängigmachung, Eclipse IDE-Speicher Heimatkunde solche Funktionen könnten Ihren Arsch retten
Ich habe aus Versehen git reset --hard
auf meinem Repo heute zu, während mit uncommitted Änderungen zu heute. Um es zurückzubekommen, habe ich git fsck --lost-found
die alle nicht referenzierten Blobs nach <path to repo>/.git/lost-found/
. Da die Dateien nicht übertragen wurden, fand ich sie im Verzeichnis other
Verzeichnis innerhalb der <path to repo>/.git/lost-found/
. Von dort aus kann ich die nicht übertragenen Dateien mit git show <filename>
, kopieren Sie die Blobs heraus und benennen Sie sie um.
Hinweis: Dies funktioniert nur, wenn Sie die Dateien, die Sie speichern möchten, in den Index aufgenommen haben (mit git add .
). Wenn die Dateien nicht im Index enthalten waren, sind sie verloren.
Ja, Sie können nach einem Hard-Reset wiederhergestellt werden. in Git.
Verwendung:
git reflog
um die Kennung Ihrer Übertragung zu erhalten. Verwenden Sie dann:
git reset --hard <commit-id-retrieved-using-reflog>
Dieser Trick hat mir schon ein paar Mal das Leben gerettet.
Die Dokumentation von reflog finden Sie unter HIER .
Während ich an einem lokalen Projekt arbeitete, wollte ich es auf GitHub verschieben und erstellte dann ein neues Repository. Während ich versuchte, all diese Dateien mit .gitignore zum neuen Repository hinzuzufügen, fügte ich versehentlich eine falsche Datei hinzu und versuchte dann, sie zu löschen.
Ich lief git reset --hard origin/master
Dann wurden alle meine lokalen Dateien gelöscht, weil das Repository leer war. Ich dachte, alles sei weg.
Das hat bei mir funktioniert:
git reflog show
git reset HEAD@{1}
git push
- See previous answers
- Weitere Antworten anzeigen