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
Pat Notz hat recht. Sie können den Commit zurückbekommen, solange er nicht länger als ein paar Tage zurückliegt. Git sammelt Müll erst nach etwa einem Monat oder so, es sei denn, Sie weisen es explizit 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... HEAD@{0}: reset --hard HEAD^: updating HEAD
f6e5064... HEAD@{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 als Ergebnis des Hard-Resets entfernt wurde, aber wiederhergestellt wurde, als ich über das Reflog zurückgesetzt habe.
Sie können "git reset --hard HEAD@{1}" verwenden, ohne SHA1 verwenden zu müssen. In den meisten Fällen sollte es ausreichen, "git reset --hard ORIG_HEAD" zu verwenden.
Es gibt eine sehr wichtige Einschränkung und das ist der "--hard" Teil. --hard löscht Ihre lokalen, nicht bestätigten Änderungen. Und Sie können sie so nicht wiederherstellen (da sie nirgendwo übertragen wurden). Ich glaube, da kann man nichts machen :(
Sie müssen den sha1-Wert der Übertragung angeben, die Sie wiederherstellen möchten. Sie können den sha1 erhalten, indem Sie das reflog untersuchen ( git reflog
) und dann die
git reset --hard <sha1 of desired commit>
Aber warten Sie nicht zu lange... nach ein paar Wochen wird Git diesen Commit als nicht referenziert ansehen und alle Blobs löschen.
Warnung für mich selbst vor ein paar Minuten: Damit werden alle Änderungen zurückgesetzt. Die nicht verfolgten Dateien werden allerdings nicht berührt.
Beachten Sie, dass dies nicht die Lösung ist, wenn Sie seit dem Zurücksetzen andere Änderungen am Repository vorgenommen haben. Werfen Sie auf jeden Fall einen Blick auf das Reflog, bevor Sie etwas ausführen.
Ich habe versehentlich mein Repository zurückgesetzt und dachte, meine Arbeit sei für immer verloren. Diese Antwort hat mir den Tag gerettet.
Soviel ich weiß, --hard
verwirft nicht übertragene Änderungen. Da diese nicht von Git verfolgt werden. Aber Sie können die discarded commit
.
$ git reflog
wird aufgelistet:
b0d059c HEAD@{0}: reset: moving to HEAD~1
4bac331 HEAD@{1}: commit: added level introduction....
....
donde 4bac331
ist die discarded commit
.
Bewegen Sie nun einfach den Kopf zu diesem Commit:
$ git reset --hard 4bac331
Es ist möglich, es wiederherzustellen, wenn Git noch keinen Garbage Collect durchgeführt hat.
Verschaffen Sie sich einen Überblick über "Dangling Commits" mit fsck
:
$ git fsck --lost-found
dangling commit b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf
Wiederherstellen der hängengebliebenen Übergabe mit rebase:
$ git rebase b72e67a9bb3f1fc1b64528bcce031af4f0d6fcbf
Eine ausführliche Erklärung finden Sie hier: medium.com/@CarrieGuss/ . Lebensrettendes Zeug.
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/
38 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.