Wie kann ich von meinem aktuellen Status zu einem Snapshot zurückkehren, der bei einem bestimmten Commit erstellt wurde?
Wenn ich das tue git log
, bekomme ich die folgende Ausgabe:
$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <[email protected]>
Date: Thu Nov 4 18:59:41 2010 -0400
blah blah blah...
commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <[email protected]>
Date: Thu Nov 4 05:13:39 2010 -0400
more blah blah blah...
commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <[email protected]>
Date: Thu Nov 4 00:55:06 2010 -0400
And yet more blah blah...
commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <[email protected]>
Date: Wed Nov 3 23:56:08 2010 -0400
Yep, more blah blah.
Wie kann ich ab dem 3. November zum Commit zurückkehren, dh zum Commit 0d1d7fc
?
git
git-checkout
git-reset
git-revert
Verrückter Serbe
quelle
quelle
Antworten:
Dies hängt stark davon ab, was Sie unter "Zurücksetzen" verstehen.
Wechseln Sie vorübergehend zu einem anderen Commit
Wenn Sie vorübergehend zurückkehren möchten, herumalbern und dann wieder dorthin zurückkehren möchten, wo Sie sich befinden, müssen Sie nur das gewünschte Commit überprüfen:
Oder wenn Sie Commits machen möchten, während Sie dort sind, machen Sie einen neuen Zweig, während Sie gerade dabei sind:
Um dorthin zurückzukehren, wo Sie waren, sehen Sie sich einfach die Filiale an, in der Sie sich wieder befanden. (Wenn Sie wie immer beim Wechseln von Zweigen Änderungen vorgenommen haben, müssen Sie diese entsprechend behandeln. Sie können sie zurücksetzen, um sie wegzuwerfen. Sie können sie verstauen, auschecken und Pop aufbewahren, um sie mitzunehmen sie zu einer Filiale dort, wenn Sie eine Filiale dort wollen.)
Unveröffentlichte Commits hart löschen
Wenn Sie andererseits wirklich alles loswerden möchten, was Sie seitdem getan haben, gibt es zwei Möglichkeiten. Erstens, wenn Sie keine dieser Commits veröffentlicht haben, setzen Sie sie einfach zurück:
Wenn Sie es vermasseln, haben Sie Ihre lokalen Änderungen bereits verworfen, aber Sie können zumindest wieder dorthin zurückkehren, wo Sie zuvor waren, indem Sie sie erneut zurücksetzen.
Veröffentlichen Sie veröffentlichte Commits mit neuen Commits
Wenn Sie die Arbeit jedoch veröffentlicht haben, möchten Sie den Zweig wahrscheinlich nicht zurücksetzen, da dadurch der Verlauf effektiv neu geschrieben wird. In diesem Fall könnten Sie die Commits tatsächlich zurücksetzen. Mit Git hat das Zurücksetzen eine ganz bestimmte Bedeutung: Erstellen Sie ein Commit mit dem umgekehrten Patch, um es aufzuheben. Auf diese Weise schreiben Sie keine Historie neu.
Die
git-revert
Manpage behandelt tatsächlich viel davon in ihrer Beschreibung. Ein weiterer nützlicher Link ist dieser Abschnitt von git-scm.com, in dem git-revert behandelt wird .Wenn Sie entscheiden, dass Sie doch nicht zurücksetzen möchten, können Sie das Zurücksetzen (wie hier beschrieben) zurücksetzen oder vor dem Zurücksetzen auf zurücksetzen (siehe vorherigen Abschnitt).
Diese Antwort kann auch in diesem Fall hilfreich sein:
Wie verschiebe ich HEAD zurück an einen vorherigen Speicherort? (Abgenommener Kopf)
quelle
git revert HEAD~3
als die beste wat um wieder zurück3
Commits ist am wichtigen Konvention.git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
git revert --no-commit hash1 hash2 ...
und danach einfach jede einzelne Wiederherstellung in einem Commitgit commit -m "Message"
Viele komplizierte und gefährliche Antworten hier, aber es ist eigentlich einfach:
Dadurch wird alles vom HEAD zurück zum Commit-Hash zurückgesetzt, was bedeutet, dass dieser Commit-Status im Arbeitsbaum neu erstellt wird, als ob jedes Commit seitdem zurückgeführt worden wäre. Sie können dann den aktuellen Baum festschreiben, und es wird ein brandneues Festschreiben erstellt, das im Wesentlichen dem Festschreiben entspricht, auf das Sie "zurückgesetzt" haben.
(Mit dem
--no-commit
Flag kann git alle Commits auf einmal zurücksetzen. Andernfalls werden Sie für jedes Commit im Bereich zur Eingabe einer Nachricht aufgefordert, die Ihren Verlauf mit unnötigen neuen Commits übersät.)Dies ist eine sichere und einfache Möglichkeit, einen Rollback auf einen früheren Status durchzuführen . Da keine Historie zerstört wird, kann sie für bereits veröffentlichte Commits verwendet werden.
quelle
--no-edit
stattdessen übergeben--no-commit
, damit Sie nicht für jede Umkehrung eine Commit-Nachricht bearbeiten müssen.git diff --cached
.$ git revert --no-commit 53742ae..HEAD
kehrt zurückfatal: empty commit set passed
81bcc9e HEAD{0}; e475924 HEAD{1}, ...
git reflog
81bcc9e
git revert e475924..HEAD
Rogue Coder?
Sie arbeiten alleine und möchten nur, dass es funktioniert? Befolgen Sie diese Anweisungen unten, sie haben jahrelang zuverlässig für mich und viele andere gearbeitet.
Mit anderen arbeiten? Git ist kompliziert. Lesen Sie die Kommentare unter dieser Antwort, bevor Sie etwas Unüberlegtes tun.
Zurücksetzen der Arbeitskopie auf das letzte Commit
So kehren Sie zu einem vorherigen Commit zurück und ignorieren alle Änderungen:
Dabei ist HEAD das letzte Commit in Ihrer aktuellen Niederlassung
Zurücksetzen der Arbeitskopie auf ein älteres Commit
So kehren Sie zu einem Commit zurück, das älter als das letzte Commit ist:
Credits gehen an eine ähnliche Stack Overflow-Frage: Zurück zu einem Commit durch einen SHA-Hash in Git? .
quelle
git reset --hard 56e05fc; git reset --soft HEAD@{1}; git commit
.Die beste Option für mich und wahrscheinlich für andere ist die Option zum Zurücksetzen von Git:
Dies war die beste Option für mich! Es ist einfach, schnell und effektiv!
Auch aus den Kommentaren, wenn Sie eine weniger "ballzy" Methode wollten, könnten Sie verwenden
quelle
git push -f
Flagge verwenden .. Aber seien Sie vorsichtig, es wird die Fernbedienung überschreiben .. Stellen Sie sicher, dass Sie wissen, was Sie tun möchten ...Bevor wir antworten, fügen wir einige Hintergrundinformationen hinzu und erklären, was dies
HEAD
ist.First of all what is HEAD?
HEAD
ist einfach ein Verweis auf das aktuelle Commit (aktuell) in der aktuellen Verzweigung. Es kann immer nur eine einzigeHEAD
geben (ausgenommengit worktree
).Der Inhalt von
HEAD
wird im Inneren gespeichert.git/HEAD
und enthält die 40 Bytes SHA-1 des aktuellen Commits.detached HEAD
Wenn Sie sich nicht im letzten Commit befinden, bedeutet dies, dass
HEAD
auf ein vorheriges Commit im Verlauf verwiesen wirddetached HEAD
.In der Befehlszeile sieht es folgendermaßen aus: SHA-1 anstelle des Zweignamens, da der
HEAD
nicht auf die Spitze des aktuellen Zweigs zeigt:Einige Optionen zur Wiederherstellung nach einem abgetrennten KOPF:
git checkout
Dadurch wird ein neuer Zweig ausgecheckt, der auf das gewünschte Commit verweist. Dieser Befehl checkt zu einem bestimmten Commit aus.
An diesem Punkt können Sie einen Zweig erstellen und ab diesem Punkt mit der Arbeit beginnen:
git reflog
Sie können das auch immer verwenden
reflog
.git reflog
zeigt jede Änderung an, die das aktualisiert hat,HEAD
und das Auschecken des gewünschten Reflog-Eintrags setztHEAD
diesen Commit zurück.Jedes Mal, wenn der KOPF geändert wird, wird ein neuer Eintrag in der
reflog
Dadurch kehren Sie zu Ihrem gewünschten Commit zurück
git reset HEAD --hard <commit_id>
Bewegen Sie Ihren Kopf zurück zum gewünschten Commit.
git rebase --no-autostash
.Dieses Schema zeigt, welcher Befehl was tut. Wie Sie dort sehen können,
reset && checkout
ändern Sie dieHEAD
.quelle
git reflog
, genau das brauchte ichgit reset HEAD^
--hard`Wenn Sie die Festschreibung aufheben, die letzte Festschreibungsnachricht löschen und die geänderten Dateien wieder in die Staging-Funktion versetzen möchten, verwenden Sie den folgenden Befehl:
--soft
gibt an, dass die nicht festgeschriebenen Dateien als entgegengesetzte Arbeitsdateien beibehalten werden sollen--hard
die sie verwerfen würden.HEAD~1
ist das letzte Commit. Wenn Sie 3 Commits zurücksetzen möchten, können Sie diese verwendenHEAD~3
. Wenn Sie auf eine bestimmte Revisionsnummer zurücksetzen möchten, können Sie dies auch mithilfe des SHA-Hashs tun.Dies ist ein äußerst nützlicher Befehl in Situationen, in denen Sie das Falsche begangen haben und das letzte Festschreiben rückgängig machen möchten.
Quelle: http://nakkaya.com/2009/09/24/git-delete-last-commit/
quelle
Sie können dies mit den folgenden zwei Befehlen tun:
Es wird Ihr vorheriges Git-Commit entfernen.
Wenn Sie Ihre Änderungen beibehalten möchten, können Sie auch Folgendes verwenden:
Dann werden Ihre Änderungen gespeichert.
quelle
Ich habe viele Möglichkeiten ausprobiert, um lokale Änderungen in Git rückgängig zu machen, und es scheint, dass dies am besten funktioniert, wenn Sie nur auf den neuesten Festschreibungsstatus zurückgreifen möchten.
Kurze Beschreibung:
git revert
.git checkout <commithashcode>
.Ich habe einen viel bequemeren und einfacheren Weg gefunden, um die obigen Ergebnisse zu erzielen:
Dabei zeigt HEAD auf das letzte Commit in Ihrer aktuellen Niederlassung.
Es ist der gleiche Code-Code wie von boulder_ruby vorgeschlagen, aber ich habe
git add .
zuvor hinzugefügtgit reset --hard HEAD
, um alle neuen Dateien zu löschen, die seit dem letzten Commit erstellt wurden, da dies das ist, was die meisten Leute erwarten, wenn ich zum letzten Commit zurückkehre.quelle
OK, es ist ganz einfach, zu einem früheren Commit in Git zurückzukehren ...
Zurückkehren, ohne die Änderungen beizubehalten :
Kehren Sie zurück, indem Sie die Änderungen beibehalten :
Erläuterung: using
git reset
können Sie auf einen bestimmten Status zurücksetzen. Es ist üblich, es mit einem Commit-Hash zu verwenden, wie Sie oben sehen.Aber wie Sie sehen, besteht der Unterschied darin, dass die beiden Flags verwendet werden
--soft
und--hard
standardmäßiggit reset
das--soft
Flag verwendet wird. Es wird jedoch empfohlen, immer das Flag zu verwenden. Ich erkläre jedes Flag:--Sanft
Das erläuterte Standardflag, das nicht angegeben werden muss, ändert den Arbeitsbaum nicht, fügt jedoch alle geänderten Dateien hinzu, die zum Festschreiben bereit sind, sodass Sie zum Festschreibungsstatus zurückkehren, bei dem Änderungen an Dateien nicht mehr bereitgestellt werden.
--schwer
Sei vorsichtig mit dieser Flagge. Es setzt den Arbeitsbaum und alle Änderungen an den verfolgten Dateien zurück und alles wird weg sein!
Ich habe auch das Bild unten erstellt, das in einem realen Leben mit Git passieren kann:
quelle
git reset
istgit reset --mixed
nichtgit reset --soft
. Bitte überprüfen Sie, was der Unterschied zwischen git reset --mixed, --soft und --hard ist. und was macht "git reset" im Klartext?Angenommen, Sie sprechen über Master und auf dem jeweiligen Zweig (das heißt, dies könnte jeder Arbeitszweig sein, mit dem Sie sich befassen):
Ich habe die Antwort in einem Blog-Beitrag gefunden (existiert jetzt nicht mehr)
Beachten Sie, dass dies das Zurücksetzen und Erzwingen der Änderung an der Fernbedienung ist. Wenn also andere Mitglieder Ihres Teams bereits Git gezogen haben, verursachen Sie Probleme für sie. Sie zerstören die Änderungshistorie, was ein wichtiger Grund ist, warum Menschen Git überhaupt verwenden.
Verwenden Sie lieber "Zurücksetzen" (siehe andere Antworten) als "Zurücksetzen". Wenn Sie ein Ein-Mann-Team sind, spielt es wahrscheinlich keine Rolle.
quelle
Angenommen, Sie haben die folgenden Commits in einer Textdatei mit dem Namen
~/commits-to-revert.txt
(ich habegit log --pretty=oneline
sie verwendet)Erstellen Sie ein Bash- Shell-Skript, um jedes von ihnen zurückzusetzen:
Dadurch wird alles auf den vorherigen Status zurückgesetzt, einschließlich der Erstellung und Löschung von Dateien und Verzeichnissen. Übertragen Sie es in Ihren Zweig, und Sie behalten den Verlauf bei, aber Sie haben ihn auf dieselbe Dateistruktur zurückgesetzt. Warum Git kein hat,
git revert --to <hash>
ist mir ein Rätsel.quelle
git revert HEAD~3
, um die letzten 3 Commits zu entfernengit revert -n master~3..master~1
funktionieren? (Wie aus kernel.org/pub/software/scm/git/docs/git-revert.html ersichtlich )git revert --no-commit <start>..<end>
, da esgit revert
einen Commit-Bereich in neuen (oder allen?) Versionen von Git akzeptiert. Beachten Sie, dass der Beginn des Bereichs nicht in der Wiederherstellung enthalten ist.Zusätzliche Alternativen zu Jefromis Lösungen
Jefromis Lösungen sind definitiv die besten, und Sie sollten sie auf jeden Fall verwenden. Der Vollständigkeit halber wollte ich jedoch auch diese anderen alternativen Lösungen zeigen, die auch zum Zurücksetzen eines Commits verwendet werden können (in dem Sinne, dass Sie ein neues Commit erstellen, das Änderungen im vorherigen Commit rückgängig macht , genau wie dies der
git revert
Fall ist).Um klar zu sein, diese Alternativen sind nicht der beste Weg, um Commits zurückzusetzen , wie es Jefromis Lösungen sind , aber ich möchte nur darauf hinweisen, dass Sie diese anderen Methoden auch verwenden können, um dasselbe zu erreichen wie
git revert
.Alternative 1: Hard- und Soft-Resets
Dies ist eine sehr leicht modifizierte Version von Charles Baileys Lösung, um zu einem Commit durch einen SHA-Hash in Git zurückzukehren. ::
Dies funktioniert im Wesentlichen unter Verwendung der Tatsache, dass Soft-Resets den Status des vorherigen Commits im Index- / Staging-Bereich belassen, den Sie dann festschreiben können.
Alternative 2: Löschen Sie den aktuellen Baum und ersetzen Sie ihn durch den neuen
Diese Lösung stammt aus der Lösung von svick zum Auschecken eines alten Commits und zum Erstellen eines neuen Commits :
Ähnlich wie bei Alternative 1 wird der Status
<commit>
in der aktuellen Arbeitskopie reproduziert . Dies ist zuerst erforderlich,git rm
dagit checkout
Dateien, die seitdem hinzugefügt wurden, nicht entfernt werden<commit>
.quelle
git revert HEAD~2..HEAD
der verknüpften Lösung von @ Cascabel (@ Jefromi). Ich sehe das Problem nicht.Hier ist eine viel einfachere Möglichkeit, zu einem vorherigen Commit zurückzukehren (und es in einem nicht festgeschriebenen Zustand zu haben, um damit zu tun, was immer Sie möchten):
Also, keine Notwendigkeit für Commit-IDs und so weiter :)
quelle
Es gibt einen Befehl (nicht Teil des Git-Kerns, aber im git-extras- Paket enthalten) speziell zum Zurücksetzen und Bereitstellen alter Commits:
Laut Manpage kann es auch als solches verwendet werden:
quelle
Der beste Weg ist:
Dadurch wird der Zweig auf das bestimmte Commit zurückgesetzt und anschließend der Remote-Server mit denselben Commits hochgeladen, die Sie in local haben (dadurch werden die Befehle nach diesem bestimmten Commit vollständig eliminiert).
Seien Sie vorsichtig, wenn das
--force
Flag alle nachfolgenden Commits nach dem ausgewählten Commit entfernt, ohne die Option, sie wiederherzustellen.quelle
Wenn Sie nach all den Änderungen alle diese Befehle drücken, müssen Sie möglicherweise Folgendes verwenden:
Und nicht nur
git push
.quelle
Sie können alle diese ersten Schritte selbst ausführen und zum Git-Repository zurückkehren.
Rufen Sie mit dem
git pull --all
Befehl die neueste Version Ihres Repositorys aus Bitbucket ab .Führen Sie den Git-Protokollbefehl mit
-n 4
von Ihrem Terminal aus. Die Zahl nach dem-n
bestimmt die Anzahl der Festschreibungen im Protokoll ab dem letzten Festschreiben in Ihrem lokalen Verlauf.Setzen Sie den Kopf des Repository-Verlaufs zurück, indem
git reset --hard HEAD~N
Sie die Anzahl der Commits angeben, für die Sie den Kopf zurücknehmen möchten. Im folgenden Beispiel wird der Kopf um ein Commit auf das letzte Commit im Repository-Verlauf zurückgesetzt:Übertragen Sie die Änderung in das Git-Repository
git push --force
, um die Änderung zu erzwingen.Wenn Sie das Git-Repository auf ein vorheriges Commit setzen möchten:
quelle
Zum letzten Commit zurückkehren und alle lokalen Änderungen ignorieren:
quelle
Wählen Sie das gewünschte Commit aus und überprüfen Sie es durch
bis Sie das erforderliche Commit erhalten. Tun Sie dies, um den KOPF darauf hinzuweisen
oder
git reset --hard HEAD~2
oder was auch immer.quelle
git show HEAD
ist es auch gleichbedeutend mit nur zu verwendengit log HEAD -1
.Wenn die Situation dringend ist und Sie nur schnell und schmutzig das tun möchten, was der Fragesteller gefragt hat , vorausgesetzt, Ihr Projekt befindet sich in einem Verzeichnis mit dem Namen "Mein Projekt":
SCHNELL UND SCHMUTZIG : Abhängig von den Umständen kann schnell und schmutzig tatsächlich sehr GUT sein. Was meine Lösung hier tut, ist NICHT , die Dateien, die Sie in Ihrem Arbeitsverzeichnis haben, irreversibel durch Dateien zu ersetzen, die aus den Tiefen des Git-Repositorys gezogen / extrahiert wurden, das unter Ihrem .git / -Verzeichnis lauert, und zwar mit teuflisch cleveren und teuflisch mächtigen Git-Befehlen, von denen es solche gibt viele. SIE MÜSSEN KEIN TIEFES MEER-TAUCHEN TUN, UM eine möglicherweise katastrophale Situation wiederherzustellen, und der Versuch, dies ohne ausreichendes Fachwissen zu tun, kann sich als tödlich erweisen .
Kopieren Sie das gesamte Verzeichnis und nennen Sie es etwas anderes, wie "Mein Projekt - Kopie". Angenommen, Ihre Git-Repository-Dateien ("Repo") befinden sich im Verzeichnis "Mein Projekt" (der Standardspeicherort für sie, unter einem Verzeichnis namens ".git"), dann haben Sie jetzt sowohl Ihre Arbeitsdateien als auch Ihre Repo-Dateien kopiert.
Tun Sie dies im Verzeichnis "Mein Projekt":
Dadurch wird der Status des Repos unter "Mein Projekt" auf den Stand zurückgesetzt, als Sie diesen Commit durchgeführt haben (ein "Commit" bedeutet eine Momentaufnahme Ihrer Arbeitsdateien). Alle Commits seitdem gehen für immer unter "Mein Projekt" verloren, ABER ... sie sind weiterhin im Repo unter "Mein Projekt - Kopie" vorhanden, da Sie alle kopiert haben diese Dateien - einschließlich der Dateien unter ... /. Git /.
Sie haben dann zwei Versionen auf Ihrem System ... Sie können Dateien von Interesse oder was auch immer aus dem vorherigen Commit untersuchen oder kopieren oder ändern. Sie können die Dateien unter "Mein Projekt - Kopie" vollständig verwerfen, wenn Sie sich für die neue Arbeit entschieden haben, da das wiederhergestellte Commit nirgendwo hingegangen ist ...
Wenn Sie den Status des Projekts fortsetzen möchten, ohne die Arbeit seit diesem abgerufenen Commit tatsächlich zu verwerfen, müssen Sie Ihr Verzeichnis erneut umbenennen: Löschen Sie das Projekt mit dem abgerufenen Commit (oder geben Sie ihm einen temporären Namen) und benennen Sie Ihr " mein Projekt - kopiere "Verzeichnis zurück in" mein Projekt ". Versuchen Sie dann vielleicht, einige der anderen Antworten hier zu verstehen, und führen Sie wahrscheinlich bald ein weiteres Commit durch.
Git ist eine brillante Kreation, aber absolut niemand kann sie einfach "on the fly" aufgreifen: auch Leute, die versuchen, sie viel zu oft zu erklären setzen Vorkenntnisse anderer VCS [Versionskontrollsysteme] voraus und vertiefen sich viel zu tief zu früh und begehen andere Verbrechen, wie die Verwendung austauschbarer Begriffe zum "Auschecken" - auf eine Weise, die manchmal fast so berechnet erscheint, dass sie einen Anfänger verwirrt.
Um sich viel Stress zu ersparen, lernen Sie aus meinen Narben. Man muss so ziemlich ein Buch über Git lesen - ich würde "Versionskontrolle mit Git" empfehlen . Mach es eher früher als später. Wenn Sie dies tun, denken Sie daran, dass ein Großteil der Komplexität von Git durch Verzweigen und anschließendes Zusammenführen entsteht: Sie können diese Teile in jedem Buch überspringen. Nach Ihrer Frage gibt es keinen Grund, warum die Leute Sie mit der Wissenschaft blenden sollten .
Besonders wenn dies zum Beispiel eine verzweifelte Situation ist und Sie ein Neuling bei Git sind!
PS: Ein anderer Gedanke: Es ist (jetzt) eigentlich ganz einfach, das Git-Repo in einem anderen Verzeichnis als dem mit den Arbeitsdateien zu speichern. Dies würde bedeuten, dass Sie nicht das gesamte Git-Repository mit der oben genannten Quick & Dirty-Lösung kopieren müssen. Die Antwort von Fryer finden Sie
--separate-git-dir
hier . Seien Sie jedoch gewarnt : Wenn Sie ein "separates Verzeichnis" -Repository haben, das Sie nicht kopieren, und Sie einen Hard-Reset durchführen, gehen alle Versionen nach dem Reset-Commit für immer verloren, es sei denn, Sie haben, wie Sie unbedingt sollten, Sichern Sie Ihr Repository regelmäßig, vorzugsweise in der Cloud (z. B. Google Drive ).Zu diesem Thema "Sichern in der Cloud" besteht der nächste Schritt darin, ein Konto (natürlich kostenlos) bei GitHub oder (meiner Ansicht nach besser) GitLab zu eröffnen . Sie können dann regelmäßig einen
git push
Befehl ausführen, um Ihr Cloud-Repo "richtig" auf den neuesten Stand zu bringen. Aber auch hier kann es zu früh sein, darüber zu sprechen.quelle
Dies ist eine weitere Möglichkeit, direkt auf ein kürzlich festgeschriebenes Commit zurückzusetzen
Alle Änderungen, die Sie seit dem letzten Commit vorgenommen haben, werden direkt gelöscht.
PS: Es hat ein kleines Problem; Außerdem werden alle kürzlich gespeicherten Stash-Änderungen gelöscht. Was ich in den meisten Fällen denke, sollte keine Rolle spielen.
quelle
Um das Verzeichnis eines Codierers vollständig von versehentlichen Änderungen zu befreien, haben wir Folgendes verwendet:
Nur
git reset --hard HEAD
wird erhalten von Änderungen befreien, aber es wird nicht der „neuen“ Dateien loszuwerden. In ihrem Fall hatten sie versehentlich einen wichtigen Ordner an einen zufälligen Ort gezogen, und all diese Dateien wurden von Git als neu behandelt, sodass areset --hard
sie nicht reparierte. Durch vorheriges Ausführengit add -A .
wurden alle explizit mit git verfolgt, um durch das Zurücksetzen gelöscht zu werden.quelle
Gehen Sie folgendermaßen vor, um die Änderungen vom vorherigen Commit für HEAD beizubehalten und zum vorherigen Commit zu wechseln:
Wenn keine Änderungen gegenüber dem vorherigen Commit für HEAD erforderlich sind und einfach alle Änderungen verwerfen, gehen Sie wie folgt vor:
quelle
Ich glaube, einige Leute kommen zu dieser Frage und möchten wissen, wie sie festgeschriebene Änderungen, die sie an ihrem Master vorgenommen haben, rückgängig machen können - dh alles wegwerfen und zum Ursprung / Master zurückkehren. In diesem Fall tun Sie Folgendes:
/superuser/273172/how-to-reset-master-to-origin-master
quelle
Zurücksetzen ist der Befehl zum Zurücksetzen der Commits.
Stichprobe:
git revert 2h3h23233
Es ist in der Lage, die Reichweite vom KOPF wie unten zu nehmen. Hier sagt 1 "letztes Commit zurücksetzen".
git revert HEAD~1..HEAD
und dann tun
git push
quelle
Versuchen Sie, das gewünschte Commit zurückzusetzen -
git reset <COMMIT_ID>
(um die Verwendung von COMMIT_ID zu überprüfen
git log
)Dadurch werden alle geänderten Dateien in den nicht hinzugefügten Zustand zurückgesetzt.
Jetzt können Sie
checkout
alle nicht hinzugefügten Dateien vongit checkout .
Überprüfen Sie
git log
, ob Ihre Änderungen überprüft wurden.AKTUALISIEREN
Wenn Sie ein einziges Commit in Ihrem Repo haben, versuchen Sie es
git update-ref -d HEAD
quelle
Da Ihre Commits remote übertragen werden, müssen Sie sie entfernen. Lassen Sie mich annehmen, dass sich Ihr Zweig entwickelt und über den Ursprung hinausgeschoben wird .
Sie müssen zuerst die Entwicklung vom Ursprung entfernen :
Dann müssen Sie sich auf den gewünschten Status entwickeln. Lassen Sie mich annehmen, dass der Commit-Hash EFGHIJK lautet:
Zuletzt drücken Sie erneut entwickeln :
quelle
Ich hatte ein ähnliches Problem und wollte zu einem früheren Commit zurückkehren. In meinem Fall war ich nicht daran interessiert, das neuere Commit beizubehalten, daher habe ich es verwendet
Hard
.So habe ich es gemacht:
Dies wird auf das lokale Repository zurückgesetzt und hier nach der Verwendung
git push -f
wird das Remote-Repository aktualisiert.quelle
In GitKraken können Sie dies tun:
Klicken Sie mit der rechten Maustaste auf das Commit, das Sie zurücksetzen möchten, und wählen Sie: Auf dieses Commit zurücksetzen / Schwer :
Klicken Sie erneut mit der rechten Maustaste auf das Commit und wählen Sie: Aktueller Filialname / Push :
Klicken Sie auf Force Push :
Obs. : Sie müssen vorsichtig sein, da der gesamte Commit-Verlauf nach dem Hard-Reset verloren geht und diese Aktion irreversibel ist. Sie müssen sicher sein, was Sie tun.
quelle
Wenn Sie einen Fehler beim letzten Festschreiben korrigieren möchten, ist die Verwendung des Befehls git commit --amend eine gute Alternative . Wenn auf das letzte Commit nicht durch eine Referenz verwiesen wird, reicht dies aus, da ein Commit mit demselben übergeordneten Element wie das letzte Commit erstellt wird. Wenn es keinen Verweis auf das letzte Commit gibt, wird es einfach verworfen und dieses Commit ist das letzte Commit. Dies ist eine gute Möglichkeit, Commits zu korrigieren, ohne Commits zurückzusetzen. Es hat jedoch seine eigenen Einschränkungen.
quelle