Ich habe versehentlich die falschen Dateien übergeben zu Git aber das Commit noch nicht auf den Server übertragen.
Wie kann ich Machen Sie diese Commits aus dem lokalen Repository rückgängig?
Die einzige Möglichkeit scheint darin zu bestehen, die Änderungen in eine Art GUI-Texteditor zu kopieren, dann den gesamten lokalen Klon zu löschen, dann das Repository erneut zu klonen und dann die Änderungen erneut anzuwenden. Aber,
- Dies kann zu Datenverlust führen.
- Es ist sehr schwer, dies zu tun, wenn es nur ein Versehen ist
git commit
gelaufen war.
Gibt es einen besseren Weg?

Ryan Lundy
Ein Commit rückgängig zu machen ist ein wenig beängstigend, wenn Sie nicht wissen, wie es funktioniert. Aber es ist tatsächlich erstaunlich einfach, wenn Sie es verstehen. Ich zeige Ihnen die 4 verschiedenen Möglichkeiten, wie Sie einen Commit rückgängig machen können.
Option 1: git reset --hard
Angenommen, Sie haben dies, wobei C Ihr KOPF und (F) der Status Ihrer Dateien ist.
(F)
A-B-C
↑
master
Sie wollen nuke commit C und sehe es nie wieder und verliere alle Änderungen in lokal modifizierten Dateien. Du machst das:
git reset --hard HEAD~1
Das Ergebnis ist:
(F)
A-B
↑
master
Jetzt ist B der KOPF. Weil du benutzt hast --hard
werden Ihre Dateien auf ihren Zustand bei Commit B zurückgesetzt.
Option 2: git reset
Ah, aber angenommen, Commit C wäre keine Katastrophe, sondern nur ein bisschen daneben. Sie wollen Machen Sie den Commit rückgängig, behalten Sie aber Ihre Änderungen bei für ein bisschen Bearbeitung, bevor Sie einen besseren Commit machen. Beginnen Sie wieder von hier aus mit C als HEAD:
(F)
A-B-C
↑
master
Sie können dies tun, indem Sie das weglassen --hard
:
git reset HEAD~1
In diesem Fall lautet das Ergebnis:
(F)
A-B-C
↑
master
In beiden Fällen ist HEAD nur ein Zeiger auf den letzten Commit. Wenn du a machst git reset HEAD~1
, weisen Sie Git an, den HEAD-Zeiger um einen Commit zurück zu verschieben. Aber (es sei denn, Sie verwenden --hard
) lassen Sie Ihre Dateien unverändert. Also jetzt git status
zeigt die Änderungen, die Sie in C eingecheckt haben. Sie haben nichts verloren!
Möglichkeit 3: git reset --soft
Für die leichteste Berührung können Sie sogar Machen Sie Ihr Commit rückgängig, aber lassen Sie Ihre Dateien und Ihre Index:
git reset --soft HEAD~1
Dies lässt nicht nur Ihre Dateien in Ruhe, sondern auch Ihre Index allein. Wenn Sie das tun git status
, sehen Sie, dass sich die gleichen Dateien wie zuvor im Index befinden. Tatsächlich könnten Sie direkt nach diesem Befehl tun git commit
und Sie würden denselben Commit wiederholen, den Sie gerade hatten.
Option 4: Du hast es getan git reset --hard
und müssen diesen Code zurückbekommen
Eine Sache noch: Angenommen, Sie zerstören ein Commit wie im ersten Beispiel, aber dann entdecken Sie, dass Sie es doch brauchten? Pech gehabt, oder?
Nein, gibt es still ein Weg, es zurückzubekommen. Art git reflog
und Sie sehen eine Liste mit (teilweisem) Commit scha (d. h. Hashes), in denen Sie sich bewegt haben. Finden Sie das Commit, das Sie zerstört haben, und tun Sie Folgendes:
git checkout -b someNewBranchName shaYouDestroyed
Sie haben dieses Commit jetzt wiederbelebt. Commits werden in Git etwa 90 Tage lang nicht wirklich zerstört, also kannst du normalerweise zurückgehen und einen retten, den du nicht loswerden wolltest.

bdonlan
Dateien hinzufügen/entfernen, um die Dinge so zu erhalten, wie Sie es möchten:
git rm classdir
git add sourcedir
Dann den Commit ändern:
git commit --amend
Der vorherige, fehlerhafte Commit wird bearbeitet, um den neuen Indexstatus widerzuspiegeln – mit anderen Worten, es wird so sein, als hätten Sie den Fehler nie gemacht.
Beachten Sie, dass Sie dies nur tun sollten, wenn Sie noch nicht gepusht haben. Wenn Sie gepusht haben, müssen Sie einfach einen Fix normal festschreiben.

Dippas
git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"
oder
git reset --hard HEAD~1
Warnung: Der obige Befehl entfernt dauerhaft die Änderungen an der .java
Dateien (und alle anderen Dateien), die Sie übergeben wollten.
Die hard reset
zu HEAD-1
wird Ihre Arbeitskopie auf den Zustand des Commit vor Ihrem falschen Commit setzen.

Zoe steht mit der Ukraine
Um das letzte Commit zu ändern
Ersetzen Sie die Dateien im Index:
git rm --cached *.class
git add *.java
Wenn es sich um eine private Niederlassung handelt, ändern die Verpflichtung:
git commit --amend
Oder, wenn es sich um einen gemeinsam genutzten Branch handelt, machen Sie einen neuen Commit:
git commit -m 'Replace .class files with .java files'
(Um einen vorherigen Commit zu ändernverwenden Sie die fantastische interaktive Rebase.)
ProTip™: Hinzufügen *.class
zu einem ignorieren damit das nicht mehr passiert.
Um ein Commit rückgängig zu machen
Das Ändern eines Commits ist die ideale Lösung, wenn Sie das letzte Commit ändern müssen, aber eine allgemeinere Lösung ist es reset
.
Sie können Git auf jeden Commit zurücksetzen mit:
git reset @~N
Woher N
ist die Anzahl der Commits davor HEAD
und @~
setzt auf den vorherigen Commit zurück.
Anstatt den Commit zu ändern, könnten Sie Folgendes verwenden:
git reset @~
git add *.java
git commit -m "Add .java files"
Kasse git help reset
insbesondere die Abschnitte auf --soft
--mixed
und --hard
um besser zu verstehen, was dies bewirkt.
Neu protokollieren
Wenn Sie es vermasseln, können Sie immer das Reflog verwenden, um gelöschte Commits zu finden:
$ git reset @~
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~
2c52489 HEAD@{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started
9879700cookie-checkWie mache ich die letzten lokalen Commits in Git rückgängig?yes
Weißt du, was Git braucht?
git undo
, das ist es. Dann verschwindet der Ruf, den Idioten für den Umgang mit Fehlern haben, die von uns Normalsterblichen gemacht wurden. Implementieren Sie, indem Sie den aktuellen Status auf einen Git-Stack übertragen, bevor Sie ihn ausführengit
Befehl. Es würde die Leistung beeinträchtigen, daher wäre es am besten, ein Konfigurationsflag hinzuzufügen, ob es aktiviert werden soll.– Yimin Rong
20. März 2018 um 1:45 Uhr
@YiminRong Das kann mit Git’s gemacht werden
alias
Merkmal: git-scm.com/book/en/v2/Git-Basics-Git-Aliases– Edric
5. Oktober 2018 um 14:50 Uhr
Für VsCode-Benutzer geben Sie einfach Strg + Umschalt + G ein und klicken Sie dann auf drei Punkte, dh weitere Optionen, und klicken Sie dann auf Undo Last Commit
– schade
8. April 2019 um 12:15 Uhr
@YiminRong Rückgängig machen was exakt? Es gibt Dutzende sehr unterschiedlicher Funktionsfälle, in denen “Rückgängigmachen” etwas bedeutet vollständig unterschiedlich. Ich wette, das Hinzufügen eines neuen schicken “Zauberstabs” würde die Dinge nur noch mehr verwirren.
– Romain Waleri
24. März 2020 um 14:27 Uhr
@YiminRong Nicht kaufen. Die Leute fummelten immer noch herum und machten Dinge rückgängig, die nicht rückgängig gemacht werden konnten. Aber noch wichtiger,
git reflog
ist bereits nah an dem, was Sie beschreiben, gibt dem Benutzer jedoch mehr Kontrolle darüber, was (nicht) getan werden soll. Aber bitte, nein, “Rückgängig machen” funktioniert nicht überall gleich, und die Leute würden es tun erwarten viele verschiedene Dinge, die das Feature erreichen soll. Letzten Commit rückgängig machen? Letzte Aktion rückgängig machen? Wenn die letzte Aktion ein Drücken war, wie genau rückgängig machen (zurücksetzen und drücken) oder (zurücksetzen und drücken)?– Romain Waleri
25. März 2020 um 13:23 Uhr