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?
$ 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)
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.git add
alles, was Sie in Ihr neues Commit aufnehmen möchten.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.
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.
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):
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.
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
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.
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.
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.
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.
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
Verwenden Sie git revert <commit-id>
Um die Commit-ID zu erhalten, benutze einfach git log
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.
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.
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>
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.
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.
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.
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.
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.
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.
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
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.
Ein einzelner Befehl:
git reset --soft 'HEAD^'
Es funktioniert hervorragend, um das letzte lokale Commit rückgängig zu machen!
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:
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.
Wenn Sie Ihre vorgenommenen Änderungen nicht beibehalten möchten:
git reset --hard HEAD^
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.
Verwenden Sie reflog, um einen korrekten Status zu finden
git reflog
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. LOG NACH RESET
Schließlich sieht der Reflog wie auf dem Bild unten aus
REFLOG FINALE
"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 -
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
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.
git commit --amend -m "message"
Es wird das letzte Commit durch das neue Commit ersetzen.
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.
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>
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
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).
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
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.
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.
Führen Sie dies einfach in Ihrer Befehlszeile aus:
git reset --soft HEAD~
Um auf die vorherige Version zurückzusetzen, löschen Sie alle nicht festgeschriebenen Änderungen dauerhaft:
git reset --hard HEAD~1
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).
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
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>
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.
Sie können verwenden:
git reset [email protected]{1}
Dieser Befehl löscht Ihr falsches Commit ohne ein Git-Protokoll.
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:
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:
Letzter Commit rückgängig machen:
Wenn wir jetzt das Commit ohne weitere Änderungen rückgängig machen möchten, können wir es verwenden
git reset --soft HEAD^
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^
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^
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:
git gui
.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.
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
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
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).
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,
Erstes Klonen vom Remote-Server
git clone $project
Ziehen aus der Ferne (wenn ich kein lokales Commit für Push habe)
git pull
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
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
Übernehmen von file1 in $ to_be_committed_list
git commit -m "commit message description"
Lokales Commit mit dem Remote-Repository vor dem Push synchronisieren
git pull --rebase
Lösung bei Konflikten Voraussetzung Mergetool konfigurieren
git mergetool #resolve merging here, also can manually merge
Fügen Sie konfliktaufgelöste Dateien hinzu, sagen wir file1
:
git add $file1
Fortsetzung des vorherigen Befehls zur Neudefinition
git rebase --continue
Push bereit und bereits synchronisierter letzter lokaler Commit
git Push Origin head:refs/for/$branch # branch = master, dev, etc.
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.
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.
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.
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).
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.
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.
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.
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
.
Verwenden Sie diesen Befehl:
git checkout -b old-state number_commit
Verwenden Sie diesen Befehl
git checkout -b old-state 0d1d7fc32
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.
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.
Sie können jederzeit einen git checkout <SHA code>
der vorherigen Version ausführen und dann den neuen Code erneut festlegen.
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.
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.
git reset --soft B
Mit der Absicht ausführen, das Commit zu entfernen C und den Master/HEAD auf B zu richten.git status
Wurden die Dateien in commit C als staged indiziert.git commit
- Befehl ausführen, wird ein neues Commit mit denselben Änderungen wie bei C erstelltgit reset --mixed B
Aus.git add
Und dann wie gewohnt bestätigen.git reset --hard B
AusHoffe, 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
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.
Ein Popup wird geöffnet (siehe Screenshot unten)
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.
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.
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
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 :)
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.
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"
Im nächsten Bild können Sie sehen, dass Ihre Commits alle Ihre Commits protokollieren (mit dem Git-Befehl git log
).
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
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.
Der einfachste Weg, das letzte Commit rückgängig zu machen, ist
git reset HEAD^
Dadurch wird der Projektstatus vor dem Festschreiben angezeigt.
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 ...".
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:
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.
Suchen Sie nach dem letzten Commit-Hashcode, indem Sie das Protokoll folgendermaßen anzeigen:
git log
Dann
git reset <the previous co>
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:
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.
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
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).
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:
Was ich jedes Mal mache, wenn ich ein Commit/Commit rückgängig machen muss, sind:
git reset HEAD~<n>
// die Anzahl der letzten Commits, die ich rückgängig machen mussgit status
// optional. Alle Dateien sind jetzt in rot (nicht in Szene gesetzt).
Jetzt kann ich nur die Dateien hinzufügen und festlegen, die ich brauche:
git add <file names> & git commit -m "message" -m "details"
git checkout <filename>
git Push Origin <branch name> -f
// benutze -f, um den Push zu erzwingen.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.
Wenn Sie das einzige Commit auf "master" -Zweig zurücksetzen möchten
$ git update-ref -d HEAD
$ git rm --cached -r .
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>
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>
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:
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.
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.)
Wiederholen Sie das Festschreiben mit --amend
, zB:
git commit --amend
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
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
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
.
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.
Sie können git revert <commit-id>
verwenden.
Verwenden Sie zum Abrufen der Festschreibungs-ID einfach git log
.
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).
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
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