Wie kann ich git reset –hard HEAD~1 rückgängig machen?

Lesezeit: 8 Minuten

Wie kann ich git reset hard HEAD1 ruckgangig machen
Paul Wick

Ist es möglich, die durch den folgenden Befehl verursachten Änderungen rückgängig zu machen? Wenn das so ist, wie?

git reset --hard HEAD~1

  • Ich habe eine vollständige Anleitung zur Wiederherstellung verlorener Commits mit Git geschrieben. Es hat sogar Illustrationen 🙂 [Check it out][fixLink] [fixLink]: programblings.com/2008/06/07/…

    – webmat

    16. September 2008 um 17:13 Uhr


  • --hard verwirft nicht festgeschriebene Änderungen. Da diese nicht von Git verfolgt werden, gibt es keine Möglichkeit, sie über Git wiederherzustellen.

    – Zaz

    8. August 2013 um 22:22 Uhr

  • stackoverflow.com/questions/34519665/…

    – CodeWizard

    7. Mai 2016 um 22:25 Uhr

  • Dies ist ein großartiger Artikel, der Sie bei der Wiederherstellung Ihrer Dateien unterstützt.

    – Jan Schwarz

    22. Oktober 2016 um 11:10 Uhr


  • Dies ist eine großartige Ressource direkt von Github: Wie man mit Git (fast) alles rückgängig macht

    – Jasonleonhard

    3. Februar 2017 um 21:15 Uhr

1646884689 843 Wie kann ich git reset hard HEAD1 ruckgangig machen
Brian Riehmann

Pat Notz hat recht. Sie können die Zusage zurückerhalten, solange sie nicht länger als ein paar Tage zurückliegt. git sammelt nur nach ungefähr einem Monat Garbage Collection, es sei denn, Sie weisen es ausdrücklich an, neuere Blobs zu entfernen.

$ git init
Initialized empty Git repository in .git/

$ echo "testing reset" > file1
$ git add file1
$ git commit -m 'added file1'
Created initial commit 1a75c1d: added file1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file1

$ echo "added new file" > file2
$ git add file2
$ git commit -m 'added file2'
Created commit f6e5064: added file2
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file2

$ git reset --hard HEAD^
HEAD is now at 1a75c1d... added file1

$ cat file2
cat: file2: No such file or directory

$ git reflog
1a75c1d... [email protected]{0}: reset --hard HEAD^: updating HEAD
f6e5064... [email protected]{1}: commit: added file2

$ git reset --hard f6e5064
HEAD is now at f6e5064... added file2

$ cat file2
added new file

Sie können im Beispiel sehen, dass die Datei2 infolge des Hard-Resets entfernt wurde, aber beim Zurücksetzen über das Reflog wieder eingefügt wurde.

  • Sie können “git reset –hard [email protected]{1}” verwenden, es ist keine Verwendung von SHA1 erforderlich. In den meisten Fällen sollte es ausreichen, “git reset –hard ORIG_HEAD” zu verwenden.

    – Jakub Narębski

    21. Mai 2009 um 6:17 Uhr

  • git log -g kann ein bisschen schöner sein, um das Reflog anzuzeigen als git reflog.

    – Dan Formen

    28. Oktober 2010 um 13:09 Uhr

  • Es gibt eine sehr wichtige Einschränkung dabei … und das ist der “–harte” Teil. –hard bläst Ihre lokalen, nicht festgeschriebenen Änderungen weg. Und Sie können sie so nicht zurückbekommen (da sie nirgendwo begangen wurden). Ich glaube dagegen kann man nichts machen 🙁

    – Michael Anderson

    4. August 2011 um 5:05 Uhr

  • ^ Nur damit Sie wissen, dass Sie Ihre lokalen Änderungen speichern können, bevor Sie einen Reset durchführen – hart, und sie dann einfach löschen und Sie verlieren nichts! Ich muss Idioten lieben.

    – Lethjakman

    1. September 2014 um 2:49 Uhr

  • ich bevorzuge git reflog über git log -g einfach, weil Sie alle Informationen in einer Zeile erhalten, in der sha1, HEAD info und Commit-Nachrichten alle aufgereiht sind. Viel einfacher zu lesen.

    – Schneefall

    11. November 2014 um 18:41 Uhr

Wie kann ich git reset hard HEAD1 ruckgangig machen
Pat Notz

Was Sie tun möchten, ist, den sha1 des Commits anzugeben, auf den Sie wiederherstellen möchten. Sie können den sha1 erhalten, indem Sie das Reflog untersuchen (git reflog) und dann tun

git reset --hard <sha1 of desired commit>

Aber warte nicht zu lange… nach ein paar Wochen wird Git diesen Commit schließlich als nicht referenziert sehen und alle Blobs löschen.

  • Warnung für mich selbst vor ein paar Minuten: Dadurch werden alle Änderungen zurückgesetzt. Es berührt jedoch nicht die nicht verfolgten Dateien.

    – mehov

    9. Januar 2018 um 10:20 Uhr

  • Danke, das hat mich gerettet, nachdem ich versehentlich einen großen Commit entfernt habe, Git sollte eigentlich einen Bestätigungsdialog für diese Befehle haben.

    – Ghost3t

    21. Februar um 19:52 Uhr

Die Antwort ist in der detaillierten Antwort oben versteckt, Sie können einfach Folgendes tun:

$> git reset --hard [email protected]{1}

(Siehe die Ausgabe von git reflog anzeigen)

  • Beachten Sie, dass dies nicht die Lösung ist, wenn Sie seit dem Zurücksetzen andere Repo-Änderungen vorgenommen haben. Werfen Sie auf jeden Fall einen Blick auf das Reflog, bevor Sie etwas ausführen.

    – forresthopkinsa

    12. Juni 2017 um 19:06 Uhr

  • Habe versehentlich mein Repository zurückgesetzt, dachte, meine Arbeit wäre für immer verloren. Diese Antwort hat mir den Tag gerettet.

    – Zaiyang Li

    25. Juli 2018 um 15:12 Uhr


  • Wow! du hast mir echt den tag gerettet =)

    – jfcogato

    14. März 2019 um 9:22 Uhr

1646884690 471 Wie kann ich git reset hard HEAD1 ruckgangig machen
sverrejoh

Es ist möglich, es wiederherzustellen, wenn Git noch keine Garbage Collection durchgeführt hat.

Verschaffen Sie sich einen Überblick über schwebende Commits mit fsck:

$ git fsck --lost-found
dangling commit b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf

Stellen Sie das baumelnde Commit mit Rebase wieder her:

$ git rebase b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf

Wie kann ich git reset hard HEAD1 ruckgangig machen
Suhaivs

Soweit ich weiss, --hard verwirft nicht festgeschriebene Änderungen. Da diese nicht von git verfolgt werden. Aber man kann das rückgängig machen discarded commit.

$ git reflog

wird auflisten:

b0d059c [email protected]{0}: reset: moving to HEAD~1
4bac331 [email protected]{1}: commit: added level introduction....
....

wo 4bac331 ist der discarded commit.

Bewegen Sie jetzt einfach den Kopf zu diesem Commit:

$ git reset --hard 4bac331

  • du hast mich vor der feuerung bewahrt

    – JJ Strahl

    7. Januar 2021 um 23:56 Uhr

1646884691 458 Wie kann ich git reset hard HEAD1 ruckgangig machen
Chris

Wenn Sie wirklich Glück haben, wie ich es war, können Sie zu Ihrem Texteditor zurückkehren und auf “Rückgängig” klicken.

Ich weiß, das ist nicht wirklich eine richtige Antwort, aber es hat mir einen halben Tag Arbeit erspart, also wird es hoffentlich dasselbe für jemand anderen tun!

  • du hast mich vor der feuerung bewahrt

    – JJ Strahl

    7. Januar 2021 um 23:56 Uhr

1646884691 766 Wie kann ich git reset hard HEAD1 ruckgangig machen
Gemeinschaft

In den meisten Fällen ja.

Je nachdem, in welchem ​​Zustand sich Ihr Repository befand, als Sie den Befehl ausgeführt haben, sind die Auswirkungen von git reset --hard kann von trivial über rückgängig machen bis hin zu im Grunde unmöglich reichen.

Im Folgenden habe ich eine Reihe verschiedener möglicher Szenarien aufgelistet und wie Sie sich davon erholen können.

Alle meine Änderungen wurden festgeschrieben, aber jetzt sind die Festschreibungen weg!

Diese Situation tritt normalerweise auf, wenn Sie laufen git reset mit einem Argument, wie in git reset --hard HEAD~. Keine Sorge, das ist leicht zu erholen!

Wenn du nur gerannt bist git reset und seitdem nichts anderes mehr getan haben, können Sie mit diesem Einzeiler dorthin zurückkehren, wo Sie waren:

git reset --hard @{1}

Dadurch wird Ihr aktueller Zweig in dem Zustand zurückgesetzt, in dem er sich vor der letzten Änderung befand (in Ihrem Fall wäre die letzte Änderung am Zweig der Hard-Reset, den Sie rückgängig machen möchten).

Wenn Sie jedoch verfügen über seit dem Zurücksetzen andere Änderungen an Ihrem Zweig vorgenommen haben, funktioniert der obige Einzeiler nicht. Stattdessen sollten Sie laufen git reflog <branchname> , um eine Liste aller kürzlich an Ihrem Zweig vorgenommenen Änderungen (einschließlich Zurücksetzungen) anzuzeigen. Diese Liste wird in etwa so aussehen:

7c169bd [email protected]{0}: reset: moving to HEAD~
3ae5027 [email protected]{1}: commit: Changed file2
7c169bd [email protected]{2}: commit: Some change
5eb37ca [email protected]{3}: commit (initial): Initial commit

Suchen Sie in dieser Liste den Vorgang, den Sie rückgängig machen möchten. Im obigen Beispiel wäre es die erste Zeile, die besagt: “reset: moving to HEAD~”. Kopieren Sie dann die Repräsentation des Commits Vor (unten) diese Operation. In unserem Fall wäre das [email protected]{1} (oder 3ae5027sie repräsentieren beide denselben Commit) und laufen git reset --hard <commit> um Ihren aktuellen Zweig auf diesen Commit zurückzusetzen.

Ich inszenierte meine Änderungen mit git add, aber nie begangen. Jetzt sind meine Änderungen weg!

Dies ist etwas schwieriger, sich davon zu erholen. git tut Sie 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 auf einmal wiederherstellen. Stattdessen müssen Sie die einzelnen Dateien in der Datenbank von git suchen und manuell wiederherstellen. Sie können dies mit tun git fsck.

Einzelheiten dazu finden Sie unter Undo git reset –hard with uncommitted files in the staging area.

Ich hatte Änderungen an Dateien in meinem Arbeitsverzeichnis, die ich nie bereitgestellt habe git add, und nie begangen. Jetzt sind meine Änderungen weg!

Äh oh. Ich hasse es, dir das zu sagen, aber du hast wahrscheinlich kein Glück. git speichert keine Änderungen, die Sie nicht hinzufügen oder festschreiben, und gemäß der Dokumentation für git reset:

–schwer

Setzt den Index und den Arbeitsbaum zurück. Alle Änderungen an nachverfolgten Dateien in der Arbeitsstruktur seitdem <commit> werden verworfen.

Es ist möglich, dass Sie könnte Sie können Ihre Änderungen mit einem Festplattenwiederherstellungsprogramm oder einem professionellen Datenwiederherstellungsdienst wiederherstellen, aber an diesem Punkt ist das wahrscheinlich mehr Ärger als es wert ist.

  • Einzeiler hat für mich funktioniert, danke, aber ich frage mich nur, was genau das “@{1}” tut.

    – Stan Bashtavenko

    30. November 2015 um 19:45 Uhr

  • @StanB Die Dokumentation ist hier: git-scm.com/docs/git-rev-parse im Grunde bezieht es sich auf den ersten Reflog-Eintrag im aktuellen Zweig.

    – Ajedi32

    30. November 2015 um 20:44 Uhr

  • Danke, dass Sie alle Fälle abgedeckt haben. Ich hatte meine nicht begangen oder hinzugefügt.

    – xdhmoore

    28. Februar 2018 um 20:23 Uhr

986040cookie-checkWie kann ich git reset –hard HEAD~1 rückgängig machen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy