Ist es möglich, die durch den folgenden Befehl verursachten Änderungen rückgängig zu machen? Wenn ja, wie?
git reset --hard HEAD~1
Ist es möglich, die durch den folgenden Befehl verursachten Änderungen rückgängig zu machen? Wenn ja, wie?
git reset --hard HEAD~1
Das ist wirklich ein sehr guter Tipp, der mir viel Zeit erspart hat ;) Und es ist viel einfacher, als irgendetwas in Git zu tun...
Dies ist die einzige Möglichkeit, nach dem Hard-Reset noch nicht vorgenommene Änderungen an Dateien wiederherzustellen. Hat mich auch gerettet ;)
Je nachdem, in welchem Zustand sich Ihr Projektarchiv befand, als Sie den Befehl ausführten, können die Auswirkungen von git reset --hard
können von leicht rückgängig zu machen bis hin zu praktisch unmöglich reichen.
Im Folgenden habe ich eine Reihe verschiedener möglicher Szenarien aufgelistet, und wie Sie sich davon erholen können.
Diese Situation tritt normalerweise auf, wenn Sie git reset
mit einem Argument, wie in git reset --hard HEAD~
. Keine Sorge, das ist leicht zu beheben!
Wenn Sie gerade git reset
und seitdem nichts anderes gemacht haben, können Sie mit diesem Einzeiler wieder dorthin zurückkehren, wo Sie waren:
git reset --hard @{1}
Dies setzt Ihren aktuellen Zweig in den Zustand zurück, in dem er sich vor der letzten Änderung befand (in Ihrem Fall wäre die letzte Änderung am Zweig der harte Reset, den Sie rückgängig machen wollen).
Wenn Sie jedoch haben seit dem Zurücksetzen andere Änderungen an Ihrem Zweig vorgenommen haben, wird der obige Einzeiler nicht funktionieren. Stattdessen sollten Sie Folgendes ausführen git reflog
<branchname>
um eine Liste aller kürzlich an Ihrer Verzweigung vorgenommenen Änderungen (einschließlich Zurücksetzungen) anzuzeigen. Diese Liste sieht dann etwa so aus:
7c169bd master@{0}: reset: moving to HEAD~
3ae5027 master@{1}: commit: Changed file2
7c169bd master@{2}: commit: Some change
5eb37ca master@{3}: commit (initial): Initial commit
Suchen Sie in dieser Liste den Vorgang, den Sie "rückgängig" machen wollen. Im obigen Beispiel wäre das die erste Zeile, in der steht "reset: moving to HEAD~". Kopieren Sie dann die Darstellung der Übergabe vor (unten) diese Operation. In unserem Fall wäre das master@{1}
(ou 3ae5027
(beide stehen für dieselbe Übergabe), und führen Sie git reset --hard <commit>
um Ihren aktuellen Zweig auf diese Übergabe zurückzusetzen.
git add
, aber nie festgelegt. Jetzt sind meine Änderungen weg!Dies ist etwas schwieriger zu beheben. git tut haben Kopien der Dateien, die Sie hinzugefügt haben, aber da diese Kopien nie an einen bestimmten Commit gebunden waren, können Sie die Änderungen nicht alle auf einmal wiederherstellen. Stattdessen müssen Sie die einzelnen Dateien in der Git-Datenbank suchen und sie manuell wiederherstellen. Sie können dies tun mit git fsck
.
Einzelheiten hierzu finden Sie unter Rückgängig machen von git reset --hard mit nicht übertragenen Dateien im Bereitstellungsbereich .
git add
und nie begangen. Jetzt sind meine Änderungen weg!Oh, oh. Ich sage es Ihnen nur ungern, aber Sie haben wahrscheinlich Pech. git speichert keine Änderungen, die Sie nicht selbst hinzufügen oder übertragen, und laut der Dokumentation für git reset
:
--hart
Setzt den Index und den Arbeitsbaum zurück. Alle Änderungen an verfolgten Dateien im Arbeitsbaum seit
<commit>
werden verworfen.
Es ist möglich, dass Sie könnte Vielleicht können Sie Ihre Änderungen mit einem Festplattenwiederherstellungsprogramm oder einem professionellen Datenwiederherstellungsdienst wiederherstellen, aber das ist zu diesem Zeitpunkt wahrscheinlich mehr Aufwand als es wert ist.
Der Einzeiler hat bei mir funktioniert, danke, aber ich frage mich, was genau dieses "@{1}" bewirkt
@StanB Die Dokumentation finden Sie hier: git-scm.com/docs/git-rev-parse bezieht sich grundsätzlich auf den ersten Reflog-Eintrag im aktuellen Zweig.
$ git fsck --lost-found
Checking object directories: 100% (256/256), done.
Checking objects: 100% (3/3), done.
dangling blob 025cab9725ccc00fbd7202da543f556c146cb119
dangling blob 84e9af799c2f5f08fb50874e5be7fb5cb7aa7c1b
dangling blob 85f4d1a289e094012819d9732f017c7805ee85b4
dangling blob 8f654d1cd425da7389d12c17dd2d88d318496d98
dangling blob 9183b84bbd292dcc238ca546dab896e073432933
dangling blob 1448ee51d0ea16f259371b32a557b60f908d15ee
dangling blob 95372cef6148d980ab1d7539ee6fbb44f5e87e22
dangling blob 9b3bf9fb1ee82c6d6d5ec9149e38fe53d4151fbd
dangling blob 2b21002ca449a9e30dbb87e535fbd4e65bac18f7
dangling blob 2fff2f8e4ea6408ac84a8560477aa00583002e66
dangling blob 333e76340b59a944456b4befd0e007c2e23ab37b
dangling blob b87163c8def315d40721e592f15c2192a33816bb
dangling blob c22aafb90358f6bf22577d1ae077ad89d9eea0a7
dangling blob c6ef78dd64c886e9c9895e2fc4556e69e4fbb133
dangling blob 4a71f9ff8262701171d42559a283c751fea6a201
dangling blob 6b762d368f44ddd441e5b8eae6a7b611335b49a2
dangling blob 724d23914b48443b19eada79c3eb1813c3c67fed
dangling blob 749ffc9a412e7584245af5106e78167b9480a27b
dangling commit f6ce1a403399772d4146d306d5763f3f5715cb5a <- it's this one
$ git show f6ce1a403399772d4146d306d5763f3f5715cb5a
commit f6ce1a403399772d4146d306d5763f3f5715cb5a
Author: Stian Gudmundsen Høiland <stian@Stians-Mac-mini.local>
Date: Wed Aug 15 08:41:30 2012 +0200
*MY COMMIT MESSAGE IS DISPLAYED HERE*
diff --git a/Some.file b/Some.file
new file mode 100644
index 0000000..15baeba
--- /dev/null
+++ b/Some.file
*THE WHOLE COMMIT IS DISPLAYED HERE*
$ git rebase f6ce1a403399772d4146d306d5763f3f5715cb5a
First, rewinding head to replay your work on top of it...
Fast-forwarded master to f6ce1a403399772d4146d306d5763f3f5715cb5a.
Danke @Stian Gut erklärt! Für andere, die diese Antwort finden, möchte ich noch hinzufügen, dass es nicht sicher ist, dass Sie die letzte Zeile rebase machen wollen, wenn Sie mehr als einen "baumelnden" Commit haben :)
Git-cherry-pick - Wendet die Änderungen an, die durch einige bestehende Commits eingeführt wurden. Ich denke, es ist einfach und sehr hilfreich in diesem Zusammenhang
Jeder sucht danach, wenn er nach der Rückgängigmachung von Hard-Reset-Änderungen sucht. Diese Antwort sollte mehr Upvotes bekommen.
Wenn Sie eine JetBrains-IDE verwenden (alles, was auf IntelliJ basiert), können Sie über die Funktion "Local History" sogar Ihre nicht bestätigten Änderungen wiederherstellen.
Klicken Sie mit der rechten Maustaste auf Ihr oberstes Verzeichnis in Ihrem Dateibaum, suchen Sie im Kontextmenü "Lokaler Verlauf" und wählen Sie "Verlauf anzeigen". Daraufhin öffnet sich eine Ansicht, in der Ihre letzten Bearbeitungen zu finden sind. Sobald Sie die Revision gefunden haben, zu der Sie zurückkehren möchten, klicken Sie mit der rechten Maustaste darauf und dann auf "Zurücksetzen".
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
15 Stimmen
Ich habe eine vollständige Anleitung zur Wiederherstellung eines verlorenen Commits mit Git geschrieben. Es gibt sogar Illustrationen :-) [Check it out][fixLink] [fixLink]: programblings.com/2008/06/07/
39 Stimmen
--hard
verwirft unbestätigte Änderungen. Da diese nicht von Git verfolgt werden, gibt es keine Möglichkeit, sie mit Git wiederherzustellen.0 Stimmen
stackoverflow.com/questions/34519665/
1 Stimmen
Este ist ein großartiger Artikel, der Sie bei der Wiederherstellung Ihrer Dateien unterstützt.
2 Stimmen
Dies ist eine großartige Ressource direkt von Github: Wie man (fast) alles mit Git rückgängig macht
0 Stimmen
Vergessen Sie nicht Ihren Terminal-Zeilenpuffer, wenn Sie vor kurzem git diff ausgeführt haben. Das hat mich gerade gerettet.
0 Stimmen
Sehen Sie sich das an: youtube.com/watch?v=MijDnC4mz9w . Es hat meine Situation wirklich gerettet!!
0 Stimmen
Vielleicht kann man darüber streiten, aber ich neige dazu, diese Frage als ein Duplikat von stackoverflow.com/q/2510276 .
0 Stimmen
Wenn Sie eine IDE wie PHPStorm verwenden, können Sie mit Heimatkunde um sie rückgängig zu machen.
0 Stimmen
@Zaz Die Aussage "
--hard
verwirft nicht übermittelte Änderungen" ist nicht uneingeschränkt korrekt. Staged, uncommitted changes sind Git bekannt und können als dangling blobs identifiziert werden, wie in einigen der Antworten hier erwähnt.0 Stimmen
Für diejenigen, die das Pech hatten, die Änderungen nicht zu übertragen und alle ihre lokalen Änderungen zu verlieren. Sie können die geänderten Dateien immer noch wiederherstellen, indem Sie die Änderungen im Editor rückgängig machen.