it-swarm-eu.dev

Wie mache ich die letzten Commits in Git rückgängig?

Ich habe versehentlich die falschen Dateien an Git übergeben, aber ich habe das Commit noch nicht auf den Server getrieben.

Wie kann ich diese Commits aus dem lokalen Repository rückgängig machen? 

19077
Hamza Yerlikaya

Machen Sie ein Commit rückgängig und wiederholen Sie es

$ git commit -m "Something terribly misguided"             # (1)
$ git reset HEAD~                                          # (2)
<< edit files as necessary >>                              # (3)
$ git add ...                                              # (4)
$ git commit -c ORIG_HEAD                                  # (5)
  1. Dies möchten Sie rückgängig machen.
  2. Dadurch bleibt Ihr Arbeitsbaum (der Status Ihrer Dateien auf der Festplatte) unverändert, macht jedoch das Festschreiben rückgängig und lässt die festgeschriebenen Änderungen nicht im Staging (dh sie werden in git status als "Änderungen, die nicht für das Commit bereitstehen") angezeigt sie noch einmal vor dem Festlegen). Wenn Sie only möchten, weitere Änderungen zum vorherigen Commit hinzufügen oder die Commit-Nachricht ändern1, Sie können stattdessen git reset --soft HEAD~ verwenden. Dies ist wie git reset HEAD~ (wobei HEAD~ mit HEAD~1 identisch ist), Ihre vorhandenen Änderungen werden jedoch in den Vordergrund gestellt.
  3. Nehmen Sie Korrekturen an den Arbeitsbaumdateien vor.
  4. git add alles, was Sie in Ihr neues Commit aufnehmen möchten.
  5. Übernehmen Sie die Änderungen und verwenden Sie die alte Commit-Nachricht erneut. reset kopierte den alten Kopf nach .git/ORIG_HEAD; commit mit -c ORIG_HEAD öffnet einen Editor, der anfänglich die Protokollnachricht des alten Commits enthält und die Bearbeitung ermöglicht. Wenn Sie die Nachricht nicht bearbeiten müssen, können Sie die Option -C verwenden.

Beachten Sie jedoch, dass Sie, wenn Sie dem Index neue Änderungen hinzugefügt haben, diese mit commit --amend zu Ihrem vorherigen Commit hinzufügen.

Wenn der Code bereits an Ihren Server übertragen wurde und Sie die Berechtigung haben, den Verlauf zu überschreiben (rebase), dann:

git Push Origin master --force

Sie können sich auch diese Antwort ansehen: 

Wie verschiebe ich HEAD an einen vorherigen Ort? (Freistehender Kopf)

Die obige Antwort zeigt Ihnen git reflog, der verwendet wird, um herauszufinden, zu welchem ​​SHA-1 Sie zurückkehren möchten. Sobald Sie den Punkt gefunden haben, an dem Sie rückgängig machen möchten, verwenden Sie die oben beschriebene Befehlsfolge.


1 Beachten Sie jedoch, dass Sie nicht auf ein früheres Commit zurücksetzen müssen, wenn Sie gerade einen Fehler in Ihrer commit-Nachricht gemacht haben. Die einfachere Option ist git reset (um alle vorgenommenen Änderungen zu aktualisieren) und dann git commit --amend , wodurch der Standardeditor für die Commit-Nachricht geöffnet wird, der mit der letzten Commit-Nachricht ausgefüllt ist. 

20714
Esko Luontola

Ein Commit rückgängig zu machen ist etwas beängstigend, wenn Sie nicht wissen, wie es funktioniert. Aber es ist eigentlich erstaunlich einfach, wenn Sie es verstehen.

Angenommen, Sie haben Folgendes, wobei C Ihr HEAD und (F) der Status Ihrer Dateien ist.

   (F)
A-B-C
    ↑
  master

Sie wollen nuke C begehen und es nie wieder sehen. Du machst das:

git reset --hard HEAD~1

Das Ergebnis ist:

 (F)
A-B
  ↑
master

Nun ist B der Kopf. Da Sie --hard verwendet haben, werden Ihre Dateien beim Commit B auf ihren Status zurückgesetzt.

Ah, aber angenommen, Commit C sei keine Katastrophe, sondern nur ein bisschen. Sie möchten das Commit rückgängig machen, aber behalten Sie die Änderungen für ein wenig Bearbeitung zur Verfügung, bevor Sie ein besseres Commit durchführen. Nochmals von hier aus mit C als KOPF:

   (F)
A-B-C
    ↑
  master

Sie können dies tun, indem Sie den --hard weglassen:

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 das letzte Commit. Wenn Sie einen git reset HEAD~1 ausführen, weisen Sie Git an, den HEAD - Zeiger um einen Commit zurück zu verschieben. Aber (wenn Sie nicht --hard verwenden) lassen Sie Ihre Dateien so wie sie waren. Nun zeigt git status die Änderungen, die Sie in C eingecheckt haben. Sie haben nichts verloren!

Für die leichteste Berührung können Sie sogar Ihr Commit rückgängig machen, aber Ihre Dateien und Ihren index lassen:

git reset --soft HEAD~1

Dies lässt nicht nur Ihre Dateien allein, sondern auch Ihr index. Wenn Sie git status ausführen, werden Sie feststellen, dass sich dieselben Dateien im Index befinden wie zuvor. Gleich nach diesem Befehl könnten Sie git commit ausführen, und Sie würden das gleiche Commit wiederholen, das Sie gerade hatten.

Noch etwas: Angenommen, Sie zerstören ein Commit wie im ersten Beispiel, , entdecken dann aber, dass Sie es doch nötig haben? Pech gehabt, richtig?

Nein, es gibt noch einen Weg, um es zurückzubekommen. Geben Sie git reflog ein, und Sie sehen eine Liste von (partiellen) Commits shas (dh Hashes), in denen Sie sich bewegt haben.

git checkout -b someNewBranchName shaYouDestroyed

Sie haben dieses Commit jetzt wiederbelebt. Commits werden in Git für 90 Tage nicht wirklich zerstört, daher können Sie normalerweise zurückgehen und eines retten, von dem Sie nicht beabsichtigten, es loszuwerden.

10143
Ryan Lundy

Ich habe eine Weile gebraucht, um herauszufinden, vielleicht hilft das ja jemandem ...

Es gibt zwei Möglichkeiten, Ihr letztes Commit "rückgängig zu machen", abhängig davon, ob Sie Ihr Commit bereits öffentlich gemacht haben (Push an Ihr Remote-Repository):

So machen Sie ein lokales Commit rückgängig

Nehmen wir an, ich habe mich lokal engagiert, möchte das Commit jedoch jetzt entfernen.

git log
    commit 101: bad commit    # latest commit, this would be called 'HEAD'
    commit 100: good commit   # second to last commit, this is the one we want

Um alles wieder so zu machen, wie es vor dem letzten Commit war, müssen wir reset auf das Commit vor HEAD setzen:

git reset --soft HEAD^     # use --soft if you want to keep your changes
git reset --hard HEAD^     # use --hard if you don't care about keeping the changes you made

Jetzt zeigt git log, dass unser letzter Commit entfernt wurde.

So machen Sie ein öffentliches Commit rückgängig

Wenn Sie Ihre Commits bereits veröffentlicht haben, möchten Sie ein neues Commit erstellen, das die in Ihrem vorherigen Commit (aktuellen HEAD) vorgenommenen Änderungen "zurücksetzt".

git revert HEAD

Ihre Änderungen werden nun rückgängig gemacht und stehen für Sie bereit:

git commit -m 'restoring the file I removed by accident'
git log
    commit 102: restoring the file I removed by accident
    commit 101: removing a file we don't need
    commit 100: adding a file that we need

Weitere Informationen finden Sie unter Git Basics - Rückgängigmachen von Dingen

1909
Andrew

Fügen Sie Dateien hinzu oder entfernen Sie sie, um die gewünschten Einstellungen zu erhalten:

git rm classdir
git add sourcedir

Dann das Commit ändern:

git commit --amend

Das vorherige, fehlerhafte Commit wird so bearbeitet, dass es den neuen Indexzustand wiedergibt. Mit anderen Worten, es ist, als hätten Sie den Fehler nie gemacht.

Beachten Sie, dass Sie dies nur tun sollten, wenn Sie noch nicht gedrückt haben. Wenn Sie gepusht haben, müssen Sie normalerweise nur eine Korrektur durchführen.

1669
bdonlan
git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"

oder

git reset --hard HEAD~1

Warnung: Durch den obigen Befehl werden die Änderungen an den .Java-Dateien (und allen anderen Dateien), die Sie festschreiben möchten, dauerhaft entfernt.

Mit hard reset bis HEAD-1 wird Ihre Arbeitskopie vor dem falschen Commit auf den Status des Commits gesetzt.

933

Um das letzte Commit zu ändern

Ersetzen Sie die Dateien im Index:

git rm --cached *.class
git add *.Java

Wenn es sich um einen privaten Zweig handelt, abändern das Festschreiben:

git commit --amend

Wenn es sich um einen gemeinsam genutzten Zweig handelt, geben Sie ein neues Commit ein:

git commit -m 'Replace .class files with .Java files'


(zum Ändern eines vorherigen Commits, verwenden Sie die awesome interactive rebase )


ProTip ™: Fügen Sie *.class zu einem gitignore hinzu, um dies erneut zu verhindern.


Ein Commit zurücknehmen

Das Ändern eines Commits ist die ideale Lösung, wenn Sie das letzte Commit ändern müssen. Eine allgemeinere Lösung ist reset.

Sie können git mit jedem Commit zurücksetzen:

git reset @~N

Dabei ist N die Anzahl der Commits vor HEAD und @~ wird auf den vorherigen Commit zurückgesetzt.

Anstatt das Festschreiben zu ändern, können Sie Folgendes verwenden:

git reset @~
git add *.Java
git commit -m "Add .Java files"

Schauen Sie sich git help reset an, insbesondere die Abschnitte --soft--mixed und --hard, um ein besseres Verständnis der Funktionsweise zu erhalten.

Reflog

Wenn Sie etwas vermasseln, können Sie das reflog immer verwenden, um abgelegte Commits zu finden:

$ git reset @~
$ git reflog
c4f708b [email protected]{0}: reset: moving to @~
2c52489 [email protected]{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started


712
Zaz

Verwenden Sie git revert <commit-id>

Um die Commit-ID zu erhalten, benutze einfach git log

594
Jaco Pretorius

Wenn Sie vorhaben, ein lokales Commit vollständig rückgängig zu machen, und was auch immer Sie beim Commit geändert haben, und wenn Sie sich darüber keine Gedanken machen, führen Sie einfach den folgenden Befehl aus.

git reset --hard HEAD^1

(Dieser Befehl ignoriert Ihr gesamtes Commit und Ihre Änderungen gehen vollständig aus Ihrem lokalen Arbeitsbaum verloren.) Wenn Sie Ihr Commit rückgängig machen möchten, Ihre Änderungen jedoch im Staging-Bereich (vor dem Commit genauso wie nach git add) vorgenommen werden sollen, führen Sie den folgenden Befehl aus.

git reset --soft HEAD^1

Nun kommen Ihre zugesagten Dateien in den Bereitstellungsbereich. Angenommen, Sie möchten die Dateien in den Vordergrund stellen, da Sie einen falschen Inhalt bearbeiten müssen, dann führen Sie den folgenden Befehl aus

git reset HEAD

Nun werden festgeschriebene Dateien aus dem bereitgestellten Bereich in den nicht bereitgestellten Bereich übertragen. Jetzt sind die Dateien zum Bearbeiten bereit. Wenn Sie also Änderungen vornehmen, möchten Sie sie bearbeiten und hinzufügen und ein neues Commit ausführen.

Mehr

477
Madhan Ayyasamy

Wenn Sie Git Extras installiert haben, können Sie git undo ausführen, um das letzte Commit zu widerrufen. git undo 3 macht die letzten 3 Commits rückgängig.

456
nickf

Ich wollte die letzten 5 Commits in unserem gemeinsamen Repository rückgängig machen. Ich habe die Revisions-ID nachgeschlagen, zu der ich einen Rollback ausführen wollte. Dann habe ich folgendes eingegeben.

Prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
Prompt> git Push Origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To [email protected]:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
Prompt>
424
neoneye

Ich ziehe es vor, git rebase -i für diesen Job zu verwenden, da eine Liste mit Nizza angezeigt wird, in der ich die Commits auswählen kann, die entfernt werden sollen. Es ist vielleicht nicht so direkt wie einige andere Antworten, aber es fühlt sich nur fühlt sich richtig an.

Wählen Sie aus, wie viele Commits Sie auflisten möchten, und rufen Sie dann wie folgt auf (um die letzten drei zu registrieren)

git rebase -i HEAD~3

Musterliste

pick aa28ba7 Sanity check for RtmpSrv port
pick c26c541 RtmpSrv version option
pick 58d6909 Better URL decoding support

Dann entfernt Git Commits für alle Zeilen, die Sie entfernen.

401
Steven Penny

So beheben Sie das vorherige lokale Commit

Verwenden Sie git-gui (oder ähnliches), um einen git commit --amend auszuführen. Über die GUI können Sie einzelne Dateien zum Commit hinzufügen oder daraus entfernen. Sie können die Festschreibungsnachricht auch ändern. 

So machen Sie das vorherige lokale Commit rückgängig

Setzen Sie Ihren Zweig einfach an den vorherigen Ort zurück (z. B. mit gitk oder git rebase). Wenden Sie dann Ihre Änderungen erneut von einer gespeicherten Kopie an. Nach der Garbage Collection in Ihrem lokalen Repository wird es so aussehen, als ob das unerwünschte Commit nie stattgefunden hätte. Um dies alles in einem einzigen Befehl auszuführen, verwenden Sie git reset HEAD~1.

Wort der Warnung: Unvorsichtige Verwendung von git reset ist eine gute Möglichkeit, Ihre Arbeitskopie in einen verwirrenden Zustand zu bringen. Ich empfehle Git-Neulingen, dies zu vermeiden, wenn sie können.

So machen Sie ein öffentliches Commit rückgängig

Führen Sie einen Reverse Cherry Pick ( git-revert ) aus, um die Änderungen rückgängig zu machen.

Wenn Sie noch keine Änderungen in Ihrem Zweig vorgenommen haben, können Sie einfach ...

git revert --no-edit HEAD

Schieben Sie dann Ihren aktualisierten Zweig in das freigegebene Repository.

Der Commit-Verlauf zeigt beide Commits getrennt an.


Erweitert: Korrektur des Zweigs private im öffentlichen Repository

Dies kann gefährlich sein - stellen Sie sicher, dass Sie eine lokale Kopie des Zweiges haben, die erneut verwendet werden soll.

Beachten Sie auch: Sie möchten dies nicht tun, wenn möglicherweise eine andere Person am Zweig arbeitet.

git Push --delete (branch_name) ## remove public version of branch

Bereinigen Sie Ihre Niederlassung vor Ort, dann ...

git Push Origin (branch_name)

Im Normalfall müssen Sie sich wahrscheinlich keine Sorgen darüber machen, dass die Historie Ihres privaten Zweigs unberührt bleibt. Drücken Sie einfach ein Folge-Commit (siehe 'So machen Sie ein öffentliches Commit rückgängig'), und machen Sie später einen Squash -merge , um den Verlauf auszublenden.

386
nobar

Wenn Sie Junk begangen haben, aber nicht gestoßen wurden,

git reset --soft HEAD~1

HEAD ~ 1 ist eine Abkürzung für das Commit vor dem Kopf. Alternativ können Sie sich auf das SHA-1 des Hash beziehen, wenn Sie auf zurücksetzen möchten. Die Option --soft löscht das Festschreiben, aber alle geänderten Dateien bleiben "Änderungen für das Festschreiben", wie es der git-Status bedeutet.

Wenn Sie Änderungen an verfolgten Dateien im Arbeitsbaum seit dem Commit vor dem Kopf entfernen möchten, verwenden Sie stattdessen " --hard ".

OR

Wenn Sie bereits gedrückt und jemand gezogen hat, was normalerweise mein Fall ist, können Sie git reset nicht verwenden. Sie können jedoch eine git-Funktion ausführen,

git revert HEAD

Dadurch wird ein neues Commit erstellt, das alles, was durch das versehentliche Commit eingeführt wurde, aufhebt.

310
santos_mgr

Wenn Sie es dauerhaft rückgängig machen möchten und ein Repository geklont haben 

Die Festschreibungs-ID kann durch gesehen werden 

git log 

Dann kannst du -

git reset --hard <commit_id>

git Push Origin <branch_name> -f
306
poorva

Auf SourceTree (GUI für GitHub) können Sie mit der rechten Maustaste auf das Commit klicken und ein Reverse Commit ausführen. Dies sollte Ihre Änderungen rückgängig machen.

Auf dem Terminal:

Sie können alternativ verwenden:

git revert

Oder:

git reset --soft HEAD^ # Use --soft if you want to keep your changes.
git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes.
258
Varun Parakh

Ein einzelner Befehl:

git reset --soft 'HEAD^' 

Es funktioniert hervorragend, um das letzte lokale Commit rückgängig zu machen!

242

Setzen Sie es einfach zurück, indem Sie den folgenden Befehl mit git ausführen:

git reset --soft HEAD~1

Explain: was git reset tut, es ist im Grunde reset für jedes Commit, zu dem Sie zurückkehren möchten. Wenn Sie es mit der --soft-Taste kombinieren, wird es zurückgehen, aber die Änderungen in Ihren Dateien bleiben erhalten. Sie kehren also zu der Stufe zurück, zu der die Datei gerade hinzugefügt wurde. HEAD ist der Kopf der Verzweigung und wenn Sie mit ~1 kombinieren (in diesem Fall verwenden Sie auch HEAD^), wird nur ein Commit zurückgegeben, was Sie möchten. .

Ich erstelle die Schritte im Bild unten detaillierter für Sie, einschließlich aller Schritte, die in realen Situationen auftreten können, und legen den Code fest:

 How to undo the last commits in Git?

229
Alireza

Wie mache ich das letzte Git-Commit rückgängig?

Um alles wieder so zu machen, wie es vor dem letzten Commit war, müssen wir das Commit vor HEAD zurücksetzen.

  1. Wenn Sie Ihre vorgenommenen Änderungen nicht beibehalten möchten:

    git reset --hard HEAD^
    
  2. Wenn Sie Ihre Änderungen beibehalten möchten:

    git reset --soft HEAD^
    

Überprüfen Sie jetzt Ihr Git-Log. Es wird zeigen, dass unser letzter Commit entfernt wurde.

216

Verwenden Sie reflog, um einen korrekten Status zu finden

git reflog

reflog before REFLOG VOR RESET

Wählen Sie den korrekten Reflog (in meinem Fall f3cb6e2) und geben Sie ein 

git reset --hard f3cb6e2

Danach wird das Repo HEAD auf diese HEADid .__ zurückgesetzt.reset effect LOG NACH RESET

Schließlich sieht der Reflog wie auf dem Bild unten aus

reflog after REFLOG FINALE

174

"Zurücksetzen des Arbeitsbaums auf den letzten Commit"

git reset --hard HEAD^ 

"Bereinigen Sie unbekannte Dateien aus dem Arbeitsbaum"

git clean    

siehe - Git Quick Reference

NOTE: Dieser Befehl löscht Ihren vorherigen Commit, also seien Sie vorsichtig! git reset --hard ist sicherer -

169
Ravi_Parmar

Erster Lauf: 

git reflog

Daraufhin werden alle möglichen Aktionen angezeigt, die Sie für Ihr Repository ausgeführt haben, beispielsweise Festschreiben, Zusammenführen, Ziehen usw.

Dann mach:

git reset --hard ActionIdFromRefLog
152
U. Ali

Letztes Commit rückgängig machen:

git reset --soft HEAD^ oder git reset --soft HEAD~

Dadurch wird das letzte Commit rückgängig gemacht.

Hier bedeutet --soft in die Inszenierung zurückgesetzt.

HEAD~ oder HEAD^ bedeutet, dass Sie sich vor HEAD zum Festschreiben bewegen.


Letztes Commit für neues Commit ersetzen:

git commit --amend -m "message"

Es wird das letzte Commit durch das neue Commit ersetzen.

143
akshay_rahar

Ein anderer Weg:

Überprüfen Sie den Zweig, den Sie wiederherstellen möchten, und setzen Sie dann Ihre lokale Arbeitskopie auf den Commit zurück, den Sie auf dem Remote-Server als letztes verwenden möchten (alles, was danach passiert, wird auf Wiedersehen gehen). Dazu habe ich in SourceTree mit der rechten Maustaste auf das geklickt und "BRANCHNAME auf dieses Commit zurücksetzen" ausgewählt.

Navigieren Sie dann zum lokalen Verzeichnis Ihres Repositorys und führen Sie den folgenden Befehl aus:

git -c diff.mnemonicprefix=false -c core.quotepath=false Push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Dadurch werden alle Commits nach dem aktuellen in Ihrem lokalen Repository gelöscht, jedoch nur für diesen einen Zweig.

138
CommaToast

Geben Sie git log ein und suchen Sie den Hashcode für das letzte Commit. Geben Sie dann Folgendes ein:

git reset <the previous co>
129
user853293

In meinem Fall habe ich versehentlich Dateien eingereicht, die ich nicht wollte. Also habe ich folgendes gemacht und es hat funktioniert:

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

Überprüfen Sie die Ergebnisse mit gitk oder git log --stat

125
egridasov

WAS ZU VERWENDEN IST, reset --soft oder reset --hard?

Ich zahle nur zwei Cent für @ Kyralessa Antwort:

Wenn Sie sich nicht sicher sind, was Sie verwenden sollen, wählen Sie --soft (Ich habe diese Konvention benutzt, um mich daran zu erinnern --s oft sicher).

Warum ?

Wenn du wählst --hard versehentlich werden Sie VERLIEREN Ihre Änderungen, wie es vorher nicht war. Wenn du wählst --soft versehentlich können Sie die gleichen Ergebnisse erzielen von --hard durch Anwenden zusätzlicher Befehle

git reset HEAD file.html
git checkout -- file.html

Vollständiges Beispiel

echo "some changes..." > file.html
git add file.html
git commit -m "wrong commit"

# I need to reset
git reset --hard HEAD~1 (cancel changes)
# OR
git reset --soft HEAD~1 # Back to staging
git reset HEAD file.html # back to working directory
git checkout -- file.html # cancel changes

Credits gehen an @Kyralessa.

116
amd

Verwenden Sie SourceTree (grafisches Werkzeug für Git), um Ihre Commits und den Baum anzuzeigen. Sie können es manuell zurücksetzen, indem Sie mit der rechten Maustaste darauf klicken.

114
iOS Coder

Führen Sie dies einfach in Ihrer Befehlszeile aus:

git reset --soft HEAD~ 
114
kyo

Um auf die vorherige Version zurückzusetzen, löschen Sie alle nicht festgeschriebenen Änderungen dauerhaft: 

git reset --hard HEAD~1
113
thestar

Es gibt zwei Hauptszenarien

Du hast das Commit noch nicht gepusht

Wenn es sich bei dem Problem um zusätzliche Dateien handelt, die Sie festgeschrieben haben (und Sie diese nicht im Repository speichern möchten), können Sie sie mit git rm entfernen und dann mit --amend bestätigen.

git rm <pathToFile>

Sie können auch ganze Verzeichnisse mit -r entfernen oder sogar mit anderen Bash - Befehlen kombinieren

git rm -r <pathToDirectory>
git rm $(find -name '*.class')

Nach dem Entfernen der Dateien können Sie mit der Option --amend einen Commit ausführen

git commit --amend -C HEAD # the -C option is to use the same commit message

Dadurch werden Ihre letzten lokalen Commits durch das Entfernen der zusätzlichen Dateien neu geschrieben. Diese Dateien werden also niemals per Push gesendet und auch von GC aus Ihrem lokalen .git-Repository entfernt.

Du hast das Commit bereits gedrückt

Sie können dieselbe Lösung für das andere Szenario anwenden und dann git Push mit der -f-Option ausführen, es wird jedoch nicht empfohlen empfohlen, da die Remote-Historie mit einer abweichenden Änderung überschrieben wird (dies kann Ihr Repository beschädigen).

Stattdessen müssen Sie das Festschreiben ohne --amend ausführen (denken Sie an -amend`: Diese Option schreibt den Verlauf des letzten Festschreibens neu).

113
dseminara

Es gibt viele Möglichkeiten, dies zu tun:

Git-Befehl zum Rückgängigmachen des letzten Commits/der vorherigen Commits:

Warnung: Verwenden Sie --hard nicht, wenn Sie nicht wissen, was Sie tun .-- hard ist zu gefährlich und es könnte Ihre Dateien löschen.

Der grundlegende Befehl zum Zurücksetzen des Commits in Git lautet:

$ git reset --hard <COMMIT -ID>

oder

$ git reset --hard HEAD~<n>

COMMIT-ID: ID für das Festschreiben

n: ist die Anzahl der letzten Commits, die Sie zurücksetzen möchten

Sie können die Festschreibungs-ID wie folgt erhalten:

$ **git log --oneline**

d81d3f1 function to subtract two numbers

be20eb8 function to add two numbers

bedgfgg function to mulitply two numbers

dabei sind d81d3f1 und be20eb8 Festschreibungs-ID.

Nun sehen wir einige Fälle:

Angenommen, Sie möchten das letzte Commit 'd81d3f1' zurücksetzen. Hier sind zwei Optionen:

$ git reset --hard d81d3f1

oder

$ git reset --hard HEAD~1

Angenommen, Sie möchten das Festschreiben "be20eb8" zurücksetzen:

$ git reset --hard be20eb8

Für detailliertere Informationen können Sie auch einige andere Befehle zum Zurücksetzen des Heads in einen bestimmten Zustand aufrufen und ausprobieren:

$ git reset --help
113
Upen

Für ein lokales Commit

git reset --soft HEAD~1

wenn Sie sich nicht genau erinnern, in welchem ​​Commit es sich befindet, können Sie es verwenden

git rm --cached <file>

Für ein gedrängtes Commit

Die korrekte Methode zum Entfernen von Dateien aus dem Repository-Verlauf ist git filter-branch. Das ist,

git filter-branch --index-filter 'git rm --cached <file>' HEAD

Aber ich empfehle Ihnen, diesen Befehl mit Vorsicht zu verwenden. Weitere Informationen finden Sie unter git-filter-branch (1) Manual Page.

112
geoom

Sie können verwenden:

git reset [email protected]{1}

Dieser Befehl löscht Ihr falsches Commit ohne ein Git-Protokoll.

62
Jade Han

Denke, wir haben code.txt file . Wir nehmen einige Änderungen vor und machen ein Commit .Wir können dieses Commit auf drei Arten rückgängig machen, aber zuerst sollten Sie es tun wissen, was die bereitgestellte Datei ist ....__ Eine bereitgestellte Datei ist eine Datei, die zum Festschreiben bereit ist. Wenn Sie git status ausführen, wird diese Datei mit grüner Farbe angezeigt. Wenn diese nicht für das Festschreiben bereitgestellt wird, wird sie mit rot angezeigt:

 enter image description here

Das heißt, wenn Sie Ihre Änderung bestätigen, werden Ihre Änderungen an dieser Datei nicht gespeichert. Sie können diese Datei in Ihrer Phase mit git add code.txt hinzufügen und dann Ihre Änderung bestätigen:

 enter image description here

Letzter Commit rückgängig machen:

  1. Wenn wir jetzt das Commit ohne weitere Änderungen rückgängig machen möchten, können wir es verwenden

    git reset --soft HEAD^ 

     enter image description here

  2. Wenn wir Commit und seine Änderungen rückgängig machen möchten (DIESES IS] GEFÄHRLICH, da Ihre Änderung verloren geht), können wir verwenden

    git reset --hard HEAD^

     enter image description here

  3. Und wenn wir Commit rückgängig machen und Änderungen von der Bühne entfernen möchten, können wir dies verwenden

    git reset --mixed HEAD^ oder in Kurzform git reset HEAD^

     enter image description here

60
Ali Motameni

Normalerweise möchten Sie rückgängig machen ein Commit, weil Sie einen Fehler gemacht haben und das Problem behoben werden möchten. Also wirklich, Sie möchten Wiederholen ein Commit.

Die meisten Antworten konzentrieren sich auf die Befehlszeile. Die Befehlszeile ist zwar die beste Möglichkeit, Git zu verwenden, wenn Sie mit ihr vertraut sind, aber es ist denjenigen, die aus anderen Versionskontrollsystemen zu Git kommen, ein wenig fremd. 

So machen Sie es mit einer GUI. Wenn Sie Git installiert haben, haben Sie bereits alles, um diese Anweisungen zu befolgen.

HINWEIS: Ich gehe hier davon aus, dass Sie erkannt haben, dass das Commit falsch war, bevor Sie es gedrückt haben. Wenn Sie nicht wissen, was Schieben ist, haben Sie wahrscheinlich nicht geschoben, also fahren Sie mit den Anweisungen fort. Wenn Sie das fehlerhafte Commit vorangetrieben haben, besteht der einfachste Weg darin, das fehlerhafte Commit mit einem neuen Commit zu verfolgen, der die Probleme behebt, wie Sie es in einem Versionskontrollsystem tun würden, in dem Sie den Verlauf nicht schreiben können. 

Das heißt, wie Sie das letzte Fehler-Commit mithilfe einer GUI beheben können:

  1. Navigieren Sie in der Befehlszeile zu Ihrem Repository und starten Sie das GUI mit git gui.
  2. Wählen Sie "Letztes Commit ändern". Sie sehen Ihre letzte Bestätigungsnachricht, die von Ihnen bereitgestellten Dateien und die Dateien, die Sie nicht erstellt haben.
  3. Ändern Sie nun die Einstellungen, wie sie aussehen sollen, und klicken Sie auf Commit. 
57
Carl

Wenn Sie mit SourceTree arbeiten, hilft Ihnen dies.

Klicken Sie mit der rechten Maustaste auf das Commit und wählen Sie " Zurücksetzen ( aktueller Zweig)/Master zu diesem Commit "und zuletzt auswählen " Soft "reset.

Enter image description here

57
Alexandr

Machen Sie den letzten Commit rückgängig: 

git reset --soft HEAD~

Oder machen Sie die Zeit vor dem letzten Commit rückgängig: 

git reset --soft HEAD~2

Oder machen Sie ein früheres Commit rückgängig: 

git reset --soft <commitID>

(Sie können die Festschreibungs-ID mit git reflog abrufen.)

Denken Sie daran, den Arbeitsplatz mit zu säubern, wenn Sie ein vorheriges Commit rückgängig machen

git clean

Weitere Einzelheiten finden Sie in den Dokumenten: git-reset

53
steven

Das letzte Commit rückgängig machen

Es gibt unzählige Situationen, in denen Sie das letzte Commit in Ihrem Code wirklich rückgängig machen möchten. Z.B. weil Sie es gerne restrukturieren möchten - oder sogar ganz wegwerfen wollen!

In diesen Fällen ist der Befehl "reset" Ihr bester Freund:

$ git reset --soft HEAD~1

Mit dem obigen Befehl (reset) wird der aktuelle HEAD -Zweig auf die angegebene Version zurückgespult. In unserem obigen Beispiel möchten wir zu dem vor der aktuellen Revision zurückkehren - und damit unser letztes Commit rückgängig machen.

Beachten Sie das Flag --soft: Dadurch wird sichergestellt, dass die Änderungen in rückgängig gemachten Revisionen erhalten bleiben. Nachdem Sie den Befehl ausgeführt haben, finden Sie die Änderungen als nicht festgeschriebene lokale Änderungen in Ihrer Arbeitskopie.

Wenn Sie diese Änderungen nicht beibehalten möchten, verwenden Sie einfach das Flag --hard. Stellen Sie sicher, dass Sie dies nur tun, wenn Sie sicher sind, dass Sie diese Änderungen nicht mehr benötigen.

$ git reset --hard HEAD~1

 Enter image description here

51
Mohit

Um Ihr lokales Commit rückgängig zu machen, verwenden Sie git reset <commit>. Auch das Tutorial ist sehr hilfreich, um Ihnen zu zeigen, wie es funktioniert.

Alternativ können Sie git revert <commit>: reverting verwenden, wenn Sie ein weiteres Commit hinzufügen möchten, das die Änderungen rückgängig macht (aber sie im Projektverlauf behält).

47
mfathy00

Ein typischer Git-Zyklus

Wenn ich in den vorherigen Antworten von Git-bezogenen Befehlen spreche, möchte ich meine typischen Git-Zyklen mit allen Lesern teilen, was hilfreich sein kann. So arbeite ich mit Git,

  1. Erstes Klonen vom Remote-Server

    git clone $project

  2. Ziehen aus der Ferne (wenn ich kein lokales Commit für Push habe)

    git pull

  3. Hinzufügen einer neuen lokalen Datei1 zu $ ​​to_be_committed_list (stellen Sie sich nur vor, dass $ to_be_committed_list staged-Bereich bedeutet)

    git add $file1

  4. Fehlerhaft hinzugefügte Datei2 von $ to_be_committed_list entfernt (angenommen, dass Datei2 wie Schritt 3 hinzugefügt wurde, was ich nicht wollte)

    git reset $file2

  5. Übernehmen von file1 in $ to_be_committed_list

    git commit -m "commit message description"

  6. Lokales Commit mit dem Remote-Repository vor dem Push synchronisieren

    git pull --rebase

  7. Lösung bei Konflikten Voraussetzung Mergetool konfigurieren

    git mergetool #resolve merging here, also can manually merge

  8. Fügen Sie konfliktaufgelöste Dateien hinzu, sagen wir file1:

    git add $file1

  9. Fortsetzung des vorherigen Befehls zur Neudefinition

    git rebase --continue

  10. Push bereit und bereits synchronisierter letzter lokaler Commit

    git Push Origin head:refs/for/$branch # branch = master, dev, etc.

41

In meinem Fall habe ich mich für den falschen Zweig festgelegt und habe ihn verschoben. Was ich wollte, war, alle meine Änderungen zurück zu haben, damit ich sie an einen neuen richtigen Zweig übergeben kann, also habe ich Folgendes getan:

Wenn Sie in demselben Zweig, den Sie festgelegt und gepusht haben, "git status" eingeben, werden Sie nichts Neues sehen, weil Sie einen Commit und Push durchgeführt haben. Geben Sie nun Folgendes ein:

git reset --soft HEAD~1

Dadurch werden alle Ihre Änderungen (Dateien) wieder im Bühnenbereich abgelegt. Um sie zurück in das Arbeitsverzeichnis (unstage) zu bringen, geben Sie einfach Folgendes ein:

git reset FILE

Dabei ist "Datei" die Datei, die Sie erneut festschreiben möchten. Diese DATEI sollte sich jetzt mit allen von Ihnen vorgenommenen Änderungen im Arbeitsverzeichnis (nicht im Staging) befinden. Jetzt können Sie zu einem beliebigen Zweig wechseln und die Änderungen in diesem Zweig übernehmen. Ich hoffe, das hilft anderen Menschen, die den gleichen Fehler gemacht haben wie ich. Natürlich ist der ursprüngliche Zweig, den Sie festgelegt haben, noch immer mit allen Änderungen vorhanden, aber in meinem Fall war das in Ordnung. Wenn Sie nicht für Sie bestimmt sind, können Sie nach Wegen suchen, um das Commit in diesem Zweig zurückzusetzen.

39
FraK

VISUAL STUDIO USERS (2015 usw.)

Wenn Sie nicht in Visual Studio synchronisieren können, da Sie nicht in einen Zweig wie "Entwicklung" pushen dürfen, so oft ich es versucht habe, in Visual Studio NIEMALS dasNOR dasZUR&UUML;CKSETZEN(hart oder weich) würde funktionieren.

Per Antwort mit TONS OF VOTES:

Verwenden Sie diesen Befehl im Eingabeaufforderung root des Projekts, um alles zu nuken, was versucht wird, Push zu erhalten:

git reset --hard HEAD~1

Sichern oder komprimieren Sie Ihre Dateien nur für den Fall, dass Sie keine Arbeit usw. verlieren möchten.

38
Tom Stickel

Ich habe die Commit-ID von bitbucket erhalten und habe dann Folgendes getan:

git checkout commitID .

Beispiel:

git checkout 7991072 .

Und es hat sich wieder auf diese Arbeitskopie dieses Commit zurückgesetzt.

35
ioopl

Angenommen, Sie haben lokal ein falsches Commit ausgeführt und in ein Remote-Repository verschoben. Sie können die Verwirrung mit diesen beiden Befehlen rückgängig machen:

Zuerst müssen wir unser lokales Repository korrigieren, indem wir zu dem gewünschten Commit zurückkehren:

git reset --hard <previous good commit id where you want the local repository  to go>

Jetzt drängen wir dieses gute Commit mit folgendem Befehl zwangsweise in das entfernte Repository:

git Push --force-with-lease

Die "with-lease" -Version der force-Option verhindert das versehentliche Löschen von neuen Commits, die Sie nicht kennen (d. H. Von einer anderen Quelle stammen, seit Ihrem letzten Pull).

34
KawaiKx

Letztes Commit rückgängig machen:

git reset --soft HEAD^ or git reset --soft HEAD~

Dies macht das letzte Commit rückgängig.

Hier bedeutet --soft in die Inszenierung zurückgesetzt.

HEAD~ or HEAD^ bedeutet, sich vor HEAD zum Commit zu bewegen.

Letztes Commit für neues Commit ersetzen:

git commit --amend -m "message"

Es wird das letzte Commit durch das neue Commit ersetzen.

32
Ankit Patidar

Sie müssen das einfach und schnell erledigen

    git commit --amend

wenn es eine private Niederlassung ist oder

    git commit -m 'Replace .class files with .Java files'

wenn es sich um einen gemeinsam genutzten oder öffentlichen Zweig handelt.

32
Yahs Hef

Sie haben mehrere Möglichkeiten, Ihr letztes Commit rückgängig zu machen. Hier einige Optionen, die in einer Antwort mit Code-Snippets zusammengefasst werden

Zuerst müssen Sie herausfinden, welche "falschen" Commits Sie verwerfen möchten. Wir werden git reflog verwenden, um es zu finden.


git reflog

Sie können das reflog auch immer verwenden.
git reflog zeigt jede Änderung an, die HEAD aktualisiert hat. Wenn Sie den gewünschten Reflog-Eintrag auschecken, wird HEAD auf dieses Commit zurückgesetzt. 

Bei jeder Änderung von HEAD wird in reflog ein neuer Eintrag erstellt.
reflog ähnelt dem Befehl unix history und wird lokal auf Ihrem Rechner gespeichert.

git reflog
git checkout [email protected]{...}
# or
git checkout <sha-1>

Über die Kasse können Sie zu jedem gewünschten Commit zurückkehren und Zweigstellen oder andere Optionen erstellen, die von git Checkout zur Verfügung gestellt werden.

 enter image description here


git reset HEAD --hard <commit_id>

"Bewegen" den Kopf zurück zum gewünschten Commit.
Git reset checkt den gewünschten Commit-Inhalt in Ihrem Staging-Bereich und/oder in Ihrem Arbeitsverzeichnis aus, basierend auf dem Wert --hard/--soft/--mixed, den Sie auswählen. --hard aktualisiert sowohl den Bühnenbereich als auch das Arbeitsverzeichnis mit dem angegebenen Inhalt und "trennt" alle anderen Commits, die über diesen Punkt in Ihrem lokalen Zweig hinausgehen. 

Wenn diese Commits nicht Teil einer anderen Branche sind, werden sie "baumeln".
"Dangle" -Inhalt bedeutet, dass sich in Ihrem lokalen Repository ein nicht erreichbarer Inhalt befindet, der nicht Teil eines anderen Zweigs ist und entfernt werden kann oder von der gc entfernt wird.

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.

Dieses Schema zeigt, welcher Befehl was tut.
Wie Sie dort sehen, reset && checkout ändern Sie HEAD.

 enter image description here

28
CodeWizard

Verwenden Sie diesen Befehl:

git checkout -b old-state number_commit
27
Fadid

Verwenden Sie diesen Befehl

git checkout -b old-state 0d1d7fc32
27

Entfernen Sie ein falsches Commit, das bereits an Github gesendet wurde

git Push Origin +(previous good commit id):(branch name)

Bitte geben Sie die letzte Good-Commit-ID an, die Sie in Github zurücksetzen möchten.

Zum Beispiel. Wenn die letzte Commit-ID falsch ist, geben Sie die vorherige Commit-ID im obigen git-Befehl mit dem Zweignamen an. 

Sie können die vorherige Commit-ID mit git log abrufen.

25
V V

Um die letzten Commits (alle Änderungen in) zu entfernen, werden die letzten beiden Commits und die letzten n Commits entfernt:

git reset --hard HEAD~1
git reset --hard HEAD~2
...
git reset --hard HEAD~n

Und um etwas nach einem bestimmten Commit loszuwerden:

git reset --hard <commit sha>

z.B., 

git reset --hard 0d12345

PS:
1- Seien Sie vorsichtig, wegen der "harten" Option löscht sie die lokalen Änderungen auch in Ihrem Repo und kehrt zum zuvor genannten Commit zurück. Sie sollte dies ausführen, wenn Sie sicher sind, dass Sie sich in Ihrem letzten Commit (s) verirrt haben und möchte in der Zeit zurückgehen. 

2- Normalerweise genügen 7 Buchstaben "Commite-sha", aber in größeren Für Projekte benötigen Sie möglicherweise bis zu 12 Buchstaben, um die Einzigartigkeit zu gewährleisten. Sie kann auch die ganzen 40 Buchstaben erwähnen.

3- Die obigen Befehle funktionieren auch in Github für Windows.

24
Alisa

Sie können jederzeit einen git checkout <SHA code> der vorherigen Version ausführen und dann den neuen Code erneut festlegen.

24
shreshta bm

Sie können Ihre Git-Commits auf zwei Arten rückgängig machen: Als Erstes können Sie git revert verwenden, wenn Sie den Commit-Verlauf beibehalten möchten:

git revert HEAD~3
git revert <hashcode of commit>

Zweitens können Sie git reset verwenden, wodurch der gesamte Commit-Verlauf gelöscht und der Kopf dazu gebracht wird, den Commit dort auszuführen, wo Sie ihn möchten.

git reset <hashcode of commit>
git reset HEAD~3

Sie können auch das --hard-Schlüsselwort verwenden, wenn sich eines davon anders verhält. Aber ich würde es nur empfehlen, bis es extrem notwendig ist.

20
Shwetank

Der Unterschied zwischen git reset --mixed, --soft und --hard

Voraussetzung: Wenn eine Änderung an einer vorhandenen Datei in Ihrem Repository vorgenommen wird, wird diese Änderung zunächst als nicht gespeichert betrachtet. Um die Änderungen festzuschreiben, muss sie bereitgestellt werden, was bedeutet, dass sie mit git add Zum Index hinzugefügt werden. Während eines Festschreibungsvorgangs werden die bereitgestellten Dateien einem Index hinzugefügt.

Nehmen wir ein Beispiel:

- A - B - C (master)

HEAD zeigt auf C und der Index stimmt mit C überein.

--Sanft

  • Wenn wir git reset --soft B Mit der Absicht ausführen, das Commit zu entfernen C und den Master/HEAD auf B zu richten.
  • Der Master/HEAD zeigt jetzt auf B, aber der Index hat sich noch von C geändert.
  • Bei der Ausführung von git status Wurden die Dateien in commit C als staged indiziert.
  • Wenn Sie an dieser Stelle einen git commit - Befehl ausführen, wird ein neues Commit mit denselben Änderungen wie bei C erstellt

--gemischt

  • Führen Sie git reset --mixed B Aus.
  • Bei der Ausführung zeigt master/HEAD auf B und der Index wird ebenfalls geändert, um mit B übereinzustimmen aufgrund des verwendeten gemischten Flags.
  • Wenn wir an dieser Stelle git commit ausführen, passiert nichts, da der Index mit HEAD übereinstimmt.
  • Wir haben noch die Änderungen im Arbeitsverzeichnis, aber da sie nicht im Index sind, zeigt Git-Status sie als unstaged an.
  • Um sie zu bestätigen, würden Sie git add Und dann wie gewohnt bestätigen.

--hart

  • Führe git reset --hard B Aus
  • Bei der Ausführung zeigt master/HEAD auf B und ändert Ihr Arbeitsverzeichnis
  • Die in C hinzugefügten Änderungen und alle nicht festgeschriebenen Änderungen werden entfernt.
  • Dateien in der Arbeitskopie stimmen mit dem Festschreiben B überein. Dies führt dazu, dass alle Änderungen, die in Festschreiben C vorgenommen wurden, sowie nicht festgeschriebene Änderungen dauerhaft verloren gehen

Hoffe, dass dieser Vergleich von Flags, die mit dem Befehl git reset Verwendet werden können, jemandem hilft, sie mit Bedacht einzusetzen. Lesen Sie diese für weitere Details link1 & link2

19

Referenz: Wie mache ich das letzte Commit in Git rückgängig?

Wenn Sie Git Extensions installiert haben, können Sie das Commit problemlos rückgängig machen/rückgängig machen (Sie können die Git-Erweiterungen von hier herunterladen).

Öffnen Sie Git Extensions, klicken Sie mit der rechten Maustaste auf das Commit, das Sie zurücksetzen möchten, und wählen Sie "Commit zurücksetzen" aus. 

 Git Extensions screen shot

Ein Popup wird geöffnet (siehe Screenshot unten)

 Revert commit popup

Wählen Sie "Commit automatisch erstellen", wenn Sie die zurückgeschriebenen Änderungen direkt übernehmen möchten oder wenn Sie die zurückgeschriebenen Änderungen manuell festschreiben möchten.

18
Ranadheer Reddy

Verwenden Sie einfach git reset --hard <last good SHA>, um Ihre Änderungen zurückzusetzen und ein neues Commit einzugeben. Sie können auch git checkout -- <bad filename> verwenden.

16
hubot

Ich habe this site gefunden, auf der beschrieben wird, wie Sie die von Ihnen in das Repository eingegebenen Dinge rückgängig machen können.

Einige Befehle:

git commit --amend        # Change last commit
git reset HEAD~1 --soft   # Undo last commit
16
Eugen Konkov

Hier ist die Site: Oh shit, git! .

Hier sind viele Rezepte, wie man Dinge in Git rückgängig machen kann. Manche von ihnen:

Oh Scheiße, ich muss die Nachricht bei meinem letzten Commit ändern!

git commit --amend
# follow prompts to change the commit message

Oh Scheiße, ich habe aus Versehen etwas zu bewältigen, das in einer brandneuen Branche hätte stehen sollen!

# Create a new branch from the current state of master
git branch some-new-branch-name
# Remove the commit from the master branch
git reset HEAD~ --hard
git checkout some-new-branch-name
# Your commit lives in this branch now :)
15
Eugen Konkov

Sie können Ihre Commits aus dem lokalen Repository rückgängig machen. Bitte folgen Sie dem nachstehenden Szenario.

Im Bild unten checke ich den 'test'-Zweig (mit dem Git-Befehl git checkout -b test) als lokal aus und überprüfe den Status (mit dem Git-Befehl git status) des lokalen Zweigs, dass nichts festgeschrieben werden muss.

 Enter image description here

Im nächsten Bild, das Sie hier sehen können, habe ich ein paar Änderungen in Filter1.txt vorgenommen, diese Datei zum Staging-Bereich hinzugefügt und dann meine Änderungen mit einer Nachricht festgeschrieben (mit dem Git-Befehl git commit -m "Doing commit to test revert back").

"-m ist für Commit-Nachricht"

 Enter image description here

Im nächsten Bild können Sie sehen, dass Ihre Commits alle Ihre Commits protokollieren (mit dem Git-Befehl git log).

 Enter image description here

Im obigen Bild können Sie also die Commit-ID bei jedem Commit und mit Ihrer Commit-Nachricht jetzt sehen, was immer Sie wollen, um die Commit-ID rückgängig zu machen oder rückgängig zu machen, und drücken Sie den unten stehenden Git-Befehl git revert {"paste your commit id"}. Beispiel:

git revert 9ca304ed12b991f8251496b4ea452857b34353e7

 Enter image description here

Ich habe mein letztes Commit zurückgenommen. Wenn Sie nun Ihren Git-Status überprüfen, können Sie die geänderte Datei sehen, die Filter1.txt ist und noch festgeschrieben werden muss.

 Enter image description here

14
Raj S. Rusia

Der einfachste Weg, das letzte Commit rückgängig zu machen, ist

git reset HEAD^

Dadurch wird der Projektstatus vor dem Festschreiben angezeigt.

14
Arun Karnawat

In IntelliJ IDEA können Sie einfach das Git-Repository-Protokoll öffnen, indem Sie auf drücken Alt+9Klicken Sie mit der rechten Maustaste auf ein Tag in der Commit-Liste und wählen Sie: "Reset Current Branch to Here ...".

13

KOPF:

Vor dem Zurücksetzen des Commits sollten wir über HEAD Bescheid wissen ... HEAD ist nichts anderes als Ihr aktueller Status in Ihrem Arbeitsverzeichnis. Sie wird durch eine Festschreibungsnummer dargestellt.

Git-Commit:

Jede Änderung wird unter einem Commit zugewiesen, das durch ein eindeutiges Tag dargestellt wird. Commits können nicht gelöscht werden. Wenn Sie Ihr letztes Commit wünschen, können Sie es einfach mit git reset eintauchen.

Sie können mit zwei Methoden in das letzte Commit eintauchen:

Methode 1: (wenn Sie die Festschreibungsnummer nicht kennen, aber zur ersten gehen möchten)

git reset HEAD~1  # It will move your head to last commit

Methode 2: (wenn Sie das Commit kennen, setzen Sie es einfach auf Ihr bekanntes Commit zurück)

git reset 0xab3 # Commit-Nummer

Hinweis: Wenn Sie einen letzten Commit erfahren möchten, versuchen Sie git log -p -1

Hier ist die grafische Darstellung:

 Enter image description here

13

Das Wiederherstellen und Löschen von Commits ist am besten geeignet, wenn Sie den Verlauf sauber halten möchten.

Wenn Sie das oberste Commit ablegen müssen, hilft der folgende Einzeiler

git rebase --onto HEAD~1 HEAD

Aber wenn Sie eine von vielen Commits löschen möchten, haben Sie gesagt

a -> b -> c -> d -> master

und Sie möchten Commit 'c' fallen lassen

git rebase --onto b c

Dadurch wird 'b' als neue Basis von 'd', wodurch 'c' eliminiert wird.

12
Khem

Suchen Sie nach dem letzten Commit-Hashcode, indem Sie das Protokoll folgendermaßen anzeigen:

git log

Dann

git reset <the previous co>
12
Praveen Singh

Der Vollständigkeit halber werde ich die offensichtlich offensichtliche Methode nennen, die in den vorangegangenen Antworten übersehen wurde.

Da das Commit nicht gepusht wurde, war die Fernbedienung unverändert, also:

  1. Löschen Sie das lokale Repository.
  2. Klonen Sie das entfernte Repository.

Dies ist manchmal notwendig, wenn Ihr Git-Client auf Wiedersehen geht. (zB non-fast-forward Fehler)

Vergessen Sie nicht, Ihre gespeicherten Änderungen seit dem letzten Push erneut zu übernehmen.

11

 enter image description here

Angenommen, Sie arbeiten in Visual Studio. Wenn Sie in Ihren Zweigverlauf einsteigen und sich all Ihre Commits ansehen, wählen Sie einfach das Ereignis vor dem Commit aus, das Sie rückgängig machen möchten, klicken Sie mit der rechten Maustaste darauf und wählen Sie Revert. So einfach ist das.

11
Uchiha Itachi

Wenn Sie die falschen Dateien entfernen möchten, sollten Sie dies tun 

git reset --soft <your_last_good_commit_hash_here>Hier, wenn Sie git status ausführen, werden die Dateien im Staging-Bereich angezeigt. Sie können die falschen Dateien auswählen und aus dem Bereitstellungsbereich entfernen.

Wie das Folgende.

git reset wrongFile1 wrongFile2 wrongFile3

Sie können jetzt einfach die Dateien hinzufügen, die Sie zum

git add goodFile1 goodFile2

begehen sie 

git commit -v oder git commit -am "Message"

und drücken

git Push Origin master

Wenn Sie sich jedoch nicht für die geänderten Dateien interessieren, können Sie den vorherigen Commit zurücksetzen und alles auf den Server pushen.

durch 

git reset --hard <your_last_good_commit_hash_here>

git Push Origin master

Wenn Sie Ihre falschen Dateien bereits auf dem Server veröffentlicht haben, können Sie das Flag --force verwenden, um auf den Server zu pushen und den Verlauf zu bearbeiten.

git Push --force Origin master

8
nPcomp

Versuchen Sie es mit einem Hard Reset auf den vorherigen Commit, bei dem diese Dateien nicht hinzugefügt wurden.

git reset --hard <commit_hash>

Vergewissern Sie sich, dass Sie eine Sicherungskopie Ihrer Änderungen haben, da dies ein Hard Reset ist. Dies bedeutet, dass sie verloren gehen (es sei denn, Sie haben zuvor etwas verstaut).

7
serdarsenay
git reset --soft HEAD~1

Zurücksetzen spult Ihren aktuellen HEAD Zweig auf die angegebene Revision zurück. Hinweis das --soft-Flag: Dies stellt sicher, dass die Änderungen in rückgängig gemachten Revisionen erhalten bleiben. Nach dem Ausführen des Befehls finden Sie die Änderungen als nicht festgeschriebene lokale Änderungen in Ihrer Arbeitskopie.

Wenn Sie diese Änderungen nicht beibehalten möchten, verwenden Sie einfach das Flag --hard. Tun Sie dies nur, wenn Sie sicher sind, dass Sie diese Änderungen nicht mehr benötigen.

 git reset --hard HEAD~1

Rückgängigmachen mehrerer Commits

git reset --hard 0ad5a7a6

beachten Sie jedoch, dass mit dem Befehl reset alle Commits rückgängig gemacht werden, die nach dem zurückgegebenen Commit ausgeführt wurden:  enter image description here

6
Abu Bakr

Was ich jedes Mal mache, wenn ich ein Commit/Commit rückgängig machen muss, sind:

  1. git reset HEAD~<n> // die Anzahl der letzten Commits, die ich rückgängig machen muss
  2. git status // optional. Alle Dateien sind jetzt in rot (nicht in Szene gesetzt).

  3. Jetzt kann ich nur die Dateien hinzufügen und festlegen, die ich brauche:

    • git add <file names> & git commit -m "message" -m "details"
  4. Optional: Ich kann die Änderungen der Restdateien bei Bedarf in ihren vorherigen Zustand rückgängig machen, mit checkout:
    • git checkout <filename>
  5. wenn ich es schon zu Remote Origin geschoben hatte:
    • git Push Origin <branch name> -f // benutze -f, um den Push zu erzwingen.
6
Theo Itzaris

Wenn Sie das allererste Commit in Ihrem Repo rückgängig machen möchten

Sie werden auf dieses Problem stoßen:

$ git reset HEAD~
fatal: ambiguous argument 'HEAD~': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Der Fehler tritt auf, weil, wenn das letzte Commit das anfängliche Commit (oder keine Eltern) des Repositorys ist, kein HEAD ~ vorhanden ist.

Lösung

Wenn Sie das einzige Commit auf "master" -Zweig zurücksetzen möchten

$ git update-ref -d HEAD
$ git rm --cached -r .
5
Nicholas

Führen Sie die folgenden Schritte aus. Es könnte dir helfen.

Schritt: 1

Hit git log

Suchen Sie in der Liste der Protokolle den letzten Festschreibungs-Hashcode und geben Sie Folgendes ein:

Schritt: 2

git reset <hash code>
4
Paras Korat

Holen Sie sich die letzte Festschreibungs-ID mit diesem Befehl (im Protokoll oben ist es die letzte):

git log

Rufen Sie die Festschreibungs-ID (GUID) ab und führen Sie den folgenden Befehl aus:

git revert <commit_id>
3

Wie wird ein früherer Commit edit

Im Allgemeinen möchte ich eine Reihe von Commits nicht rückgängig machen, sondern eher ein früheres Commit dahingehend bearbeiten, wie ich es mir gewünscht hätte.

Ich stellte fest, dass ich ein Commit in der Vergangenheit häufig genug korrigierte, sodass ich ein Skript dafür geschrieben habe.

Hier ist der Workflow:

  1. git commit-edit <commit-hash>
    

    Dadurch werden Sie bei dem Commit abgelegt, den Sie bearbeiten möchten.

    Die Änderungen des Commits werden in un inszeniert und können so ausgeführt werden, wie Sie es sich zum ersten Mal wünschen.

  2. Fixieren und inszenieren Sie das Commit so, wie Sie es sich gewünscht hätten.

    (Möglicherweise möchten Sie git stash save --keep-index verwenden, um alle Dateien, die Sie nicht begehen, zu entfernen.)

  3. Wiederholen Sie das Festschreiben mit --amend, zB:

    git commit --amend
    
  4. Vervollständige die Rebase:

    git rebase --continue
    

Rufen Sie den folgenden git-commit-edit auf und geben Sie ihn in Ihren $PATH ein:

#!/bin/bash

# Do an automatic git rebase --interactive, editing the specified commit
# Revert the index and working tree to the point before the commit was staged
# https://stackoverflow.com/a/52324605/5353461

set -euo pipefail

script_name=${0##*/}

warn () { printf '%s: %s\n' "$script_name" "$*" >&2; }
die () { warn "[email protected]"; exit 1; }

[[ $# -ge 2 ]] && die "Expected single commit to edit. Defaults to HEAD~"

# Default to editing the parent of the most recent commit
# The most recent commit can be edited with `git commit --amend`
commit=$(git rev-parse --short "${1:-HEAD~}")

# Be able to show what commit we're editing to the user
if git config --get alias.print-commit-1 &>/dev/null; then
  message=$(git print-commit-1 "$commit")
else
  message=$(git log -1 --format='%h %s' "$commit")
fi

if [[ $OSTYPE =~ ^darwin ]]; then
  sed_inplace=(sed -Ei "")
else
  sed_inplace=(sed -Ei)
fi

export GIT_SEQUENCE_EDITOR="${sed_inplace[*]} "' "s/^pick ('"$commit"' .*)/edit \\1/"'
git rebase --quiet --interactive --autostash --autosquash "$commit"~
git reset --quiet @~ "$(git rev-parse --show-toplevel)"  # Reset the cache of the toplevel directory to the previous commit
git commit --quiet --amend --no-edit --allow-empty  #  Commit an empty commit so that that cache diffs are un-reversed

echo
echo "Editing commit: $message" >&2
echo
2
Tom Hale

Wenn Sie einfach alle Ihre lokalen Änderungen/Commits in den Papierkorb verschieben möchten, und Ihre lokale Niederlassung so aussehen lässt, als wäre sie mit der ...

git reset --hard Origin/branch-name

1
JeremyWeir

Ich schrieb darüber vor Ewigkeiten, nachdem ich selbst die gleichen Probleme hatte:

https://ao.gl/how-to-delete-revert-a-git-commit/

Grundsätzlich müssen Sie nur Folgendes tun:

git log, erhalte die ersten sieben Zeichen des SHA und führe dann einen git revert <sha> gefolgt von git Push --force aus.

Sie können dies auch mit dem Befehl Git revert wie folgt rückgängig machen: git revert <sha> -m -1 und dann git Push.

1
Andrew Odendaal
git revert commit

Dadurch werden die entgegengesetzten Änderungen gegenüber dem Commit generiert, die Sie zurücksetzen möchten, und anschließend werden diese Änderungen nur festgeschrieben. Ich denke, das ist der einfachste Weg.

https://git-scm.com/docs/git-revert

1
Gjorgi Gjorgiev

Sie können git revert <commit-id> verwenden.

Verwenden Sie zum Abrufen der Festschreibungs-ID einfach git log.

1
Videsh

ersetzen Sie Ihre lokale Version einschließlich Ihrer Änderungen durch die Serverversion. Diese zwei Codezeilen zwingen git, lokal zu ziehen und zu überschreiben. Öffnen Sie die Eingabeaufforderung und navigieren Sie zum git-Projektstamm. Wenn Sie VS verwenden, klicken Sie auf Team, Synch und klicken Sie unten auf "Eingabeaufforderung öffnen" (siehe Abbildung). 

 Visual Studio

Sobald Sie sich im Cmd Prompt befinden, fahren Sie mit den folgenden zwei Anweisungen fort. 

git fetch --all

dann machst du es

git reset --hard Origin/master

dadurch wird die vorhandene lokale Version mit der auf dem git-Server überschrieben

0
shiraz
git Push --delete (branch_name) //this will be removing the public version of your branch

git Push Origin (branch_name) //This will add the previous version back
0
Omkaar.K