Zurücksetzen eines Git-repository zu einem vorherigen commit
Wie kann ich wiederherstellen von meinem aktuellen Zustand, um einen snapshot einer bestimmten verpflichten?
Wenn ich git log
, dann 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 gehen zurück auf das Begehen von November 3, D. H. Begehen 0d1d7fc
?
Im Zusammenhang Wie rückgängig machen der letzten Git commit?.
Hier ist eine sehr klare und Gründliche post zum Rückgängigmachen Dinge im git direkt von Github.
Verwandte: Rollback auf einen alten Git-commit in einem öffentlichen repo. Beachten Sie, dass diese Frage fügt eine Einschränkung, dass das repo öffentlich ist.
Ich Liebe git, aber die Tatsache, dass es 35 Antworten auf etwas, das sollte sein unglaublich einfach macht ein großes Problem mit git. Oder ist es die docs?
Sie könnten fügen Sie ein button-Funktionalität für dass wie SVN in der Geschichte
Hier ist eine sehr klare und Gründliche post zum Rückgängigmachen Dinge im git direkt von Github.
Verwandte: Rollback auf einen alten Git-commit in einem öffentlichen repo. Beachten Sie, dass diese Frage fügt eine Einschränkung, dass das repo öffentlich ist.
Ich Liebe git, aber die Tatsache, dass es 35 Antworten auf etwas, das sollte sein unglaublich einfach macht ein großes Problem mit git. Oder ist es die docs?
Sie könnten fügen Sie ein button-Funktionalität für dass wie SVN in der Geschichte
InformationsquelleAutor Crazy Serb | 2010-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser hängt weitgehend davon ab, was meinen Sie mit "revert".
Wechseln vorübergehend auf einen anderen commit
Wenn Sie möchten, um vorübergehend zurück, um es, rumtoben, dann kommen Sie zurück zu, wo Sie sind, alles, was Sie tun müssen, ist check-out die gewünschte commit:
Oder wenn Sie wollen, verpflichtet, während Sie dort sind, gehen Sie vor und machen eine neue Filiale, während du dabei bist:
Gehen Sie zurück zu, wo Sie waren, schauen Sie doch einfach in der Filiale waren Sie wieder ein. (Wenn Sie änderungen vorgenommen haben, wie immer beim wechseln der Zweige, Sie werden mit Ihnen zu tun haben, als angemessen. Könnten Sie zurücksetzen, um Sie wegzuwerfen; Sie konnte stash, Kasse, stash pop und nehmen Sie Sie mit; Sie verpflichten konnte, der Sie zu einem Zweig dort, wenn Sie möchten, eine Niederlassung dort).
Festplatte löschen unveröffentlichte verpflichtet
Wenn auf der anderen Seite wollen Sie wirklich loszuwerden, alles, was Sie seit damals gemacht habe, gibt es zwei Möglichkeiten. Eine, wenn Sie noch nicht veröffentlicht diesen begeht, einfach reset:
Wenn Sie Durcheinander bringen, haben Sie bereits weggeworfen, Ihre lokalen änderungen, aber man kann zumindest dorthin zurück, wo Sie waren, bevor Sie durch das zurücksetzen wieder.
Undo veröffentlicht, begeht mit neuen commits
Auf der anderen Seite, wenn Sie veröffentlicht haben, die Arbeit, die Sie wahrscheinlich nicht wollen, um die reset-Zweig, da es effektiv, die Geschichte umzuschreiben. In diesem Fall könnte man ja wieder die verpflichtet. Mit Git, revert hat eine sehr spezifische Bedeutung: erstellen Sie einen commit mit der rückwärts-patch, um es aufheben. Auf diese Weise müssen Sie nicht umschreiben der Geschichte.
Den
git-revert
- manpage tatsächlich deckt eine Menge von dieser in seiner Beschreibung. Ein weiterer nützlicher link ist diese git-scm.com Abschnitt über die git-revert.Wenn Sie sich entscheiden Sie nicht wollen, um wieder, nachdem alle, können Sie wiederherstellen der wiederherstellen (wie hier beschrieben) oder reset-zurück vor dem revert (siehe den vorherigen Abschnitt).
Finden Sie auch diese Antwort hilfreich in diesem Fall:
Wie bewegen Sie den KOPF zurück zu einer vorherigen Position? (Freistehende Leiter)
git revert HEAD~3
als das beste wat zurück3
verpflichtet ist, wichtig bin-Konvention.Schreiben Sie die vollständige Nummer? wie:
git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Ja, Sie können natürlich angeben, begeht durch die volle SHA1. Ich verwendet, abgekürzt hashes zu machen, die Antwort ist besser lesbar, und Sie neigen auch dazu, Sie zu verwenden, wenn Sie Tippen. Wenn Sie kopieren und einfügen, verwenden Sie den vollständigen hash. Siehe die Angabe von Revisionen in der man git-rev-parse für eine vollständige Beschreibung, wie Sie können-name verpflichtet.
Um wieder zur aktuellen wird der Befehl "git checkout master"
Sie können
git revert --no-commit hash1 hash2 ...
und nach das Begehen jeder einzelne zurückzukehren, die in einem commitgit commit -m "Message"
InformationsquelleAutor Cascabel
Zurücksetzen Arbeitskopie zum Letzten Commit
Zurückkehren zu einem vorherigen commit, ignoriert alle änderungen:
KOPF, wo ist der Letzte commit in den aktuellen branch
Zurücksetzen Die Arbeitskopie auf eine Ältere Commit
Wieder auf einem commit, der älter ist als die letzten commit:
Credits gehen an einem ähnlichen Stack Overflow Frage, Wieder eine Begehung durch einen SHA-hash in Git?.
Es heißt, Sie haben schon geschoben in der begeht Sie wollen zurückkehren. Kann es schaffen viele Probleme für Menschen, die ausgecheckt haben, Ihren code und daran zu arbeiten. Da Sie nicht anwenden, die übergabe reibungslos über die ihrigen. In einem solchen Fall besser machen git revert. Wenn du der einzige bist, der mit dem repo-Geschäft. Git push -f (Aber zweimal überlegen, bevor dies zu tun)
Obligatorische Warnung: nicht hard-reset, wenn Sie teilen Sie Ihre Zweigstelle mit anderen Menschen, die Kopien der alten begeht, weil Sie mit einem harten reset wie dieser wird Sie zwingen, zu synchronisieren Ihrer Arbeit mit den neu reset-Zweig. Der soft-reset ist sicher, obwohl, wie auch die letzten Lösungen in Antwort.
Nur ich möchte auch darauf hinweisen, dass auch für die soft-reset-Lösung, anstatt das zu tun eine gemischte reset ersten und einen hard-reset als Letzte Möglichkeit können Sie den hard-reset zunächst, wie folgt:
git reset --hard 56e05fc; git reset --soft HEAD@{1}; git commit
.linus pauling selbst, der Erfinder von git, kritisiert es als zu kompliziert. Er ist auf Rekord sagen, er sei "schockiert" git wurde so populär, aufgrund seiner Komplexität
InformationsquelleAutor boulder_ruby
Viele komplizierte und gefährliche Antworten hier, aber es ist eigentlich ganz einfach:
Diese wird wieder alles vom KOPF wieder auf die commit-hash, das heißt, es wird neu erstellen, die commit-Zustand in der Arbeitswelt Baum als wenn jedem commit da gewesen war und ging zurück. Sie können dann verpflichten, den aktuellen Baum, und es wird ein ganz neues commit im wesentlichen äquivalent zu dem commit Sie "rückgängig".
(Die
--no-commit
flag lets git revert alle änderungen auf einmal - sonst werden Sie aufgefordert, eine Nachricht für jeden commit im Bereich littering Ihre Geschichte mit unnötigen commits.)Dies ist ein einfache und sichere Weg, um rollback zu einem vorherigen Zustand. Keine Geschichte zerstört, so kann es verwendet werden, der für übertragungen, die bereits öffentlich gemacht wurden.
--no-edit
statt--no-commit
, so dass Sie nicht haben, Bearbeiten Sie eine commit-Nachricht für jede Umkehrung.Wenn man die commits zwischen 0766c053..KOPF ist ein merge, so wird dort ein Fehler auftauchen (mit no-m angegeben). Dies kann helfen, diejenigen zu stoßen, dass: stackoverflow.com/questions/5970889/...
Zu sehen sind die diffs, bevor Sie verpflichten sich, die Verwendung
git diff --cached
.$ git revert --no-commit 53742ae..HEAD
zurückfatal: empty commit set passed
das ist, weil müssen Sie den hash vor die eine, die Sie wollen, um zurück zu gehen. In meinem Fall hashes waren wie:
81bcc9e HEAD{0}; e475924 HEAD{1}, ...
(ausgit reflog
), und ich wollte das rückgängig machen, was ich in81bcc9e
, dann hatte ich zu tungit revert e475924..HEAD
InformationsquelleAutor Yarin
Die beste option für mich und wohl auch andere ist die Git reset option:
War dies die beste option für mich! Es ist einfach, schnell und effektiv!
Hinweis : Wie bereits erwähnt in den Kommentaren nicht tun, wenn Sie teilen Sie Ihre Zweigstelle mit anderen Menschen, die Kopien der alten begeht
Auch aus den Kommentaren, wenn Sie wollte einen weniger "ballzy' Methode, die Sie verwenden könnten,
git clean -i
Ich schließe mich @Cupcake ist Warnung... es ist uns sehr bewusst sein, die Folgen. Beachten Sie jedoch, dass, wenn Ihr wirklich zu machen, ist diese verpflichtet verschwinden aus der Geschichte, für immer, dieser reset+saubere Methode, es zu tun, und Sie müssen für force drücken Sie Ihre geänderte Zweige zurück, um jegliche und alle Fernbedienungen.
git clean-f Gefahr Gefahr Gefahr GEFAHR
Dies legt den Kopf an meine lokale Kopie der gewünschten Begehen. Aber dann kann ich nicht alle push verpasst, weil er sich hinter der Fernbedienung. Und wenn ich ziehen Sie aus der remote-es endet wieder da, wo es wurde auf die neueste commit auf dem remote-branch. Wie kann ich die komplett auslöschen (von überall) mehrere commits sowohl auf meiner lokalen Kopie, die verschoben wurden?
Sie konnte die
git push -f
Flagge.. Aber Vorsicht, überschreibt er den remote - .. Werden Sie sicher, dass Sie wissen, was Sie wollen, zu tun.. .InformationsquelleAutor Pogrindis
Bevor die Antwort fügen wir einige Hintergrundinformationen, die erklären, was diese
HEAD
ist.First of all what is HEAD?
HEAD
ist einfach ein Verweis auf den aktuellen commit (neueste Version) auf den aktuellen branch. Es kann nur eine einzigeHEAD
jederzeit (ohnegit worktree
).Den Inhalt
HEAD
gespeichert ist im inneren.git/HEAD
, und es enthält die 40 bytes SHA-1 der aktuellen Begehen.detached HEAD
Wenn Sie nicht auf dem neuesten Begehen - was bedeutet, dass
HEAD
verweist auf einen vor commit in der Geschichte es heißtdetached HEAD
.In der Befehlszeile wird wie folgt Aussehen - SHA-1 statt der branch-name, da die
HEAD
ist, die nicht auf die die Spitze des aktuellen Zweiges:Ein paar Möglichkeiten auf wie Sie erholen sich von einer freistehenden LEITER:
git checkout
Diese wird checkout neuen Niederlassung zeigt auf der gewünschten Begehen. Mit diesem Befehl wird die Kasse zu einem bestimmten commit.
An dieser Stelle können Sie erstellen Sie einen Zweig, und anfangen zu arbeiten, von dieser Stelle auf:
git reflog
Können Sie immer die
reflog
als gut.git reflog
zeigt jede änderung, die Aktualisierung derHEAD
und Check-out die gewünschte reflog Eintrag wird dieHEAD
zurück zu diesem verpflichten.Jedes mal den KOPF geändert wird, wird es einen neuen Eintrag in der
reflog
Diese erhalten Sie zurück zu Ihrem gewünschten commit
git reset HEAD --hard <commit_id>
"Bewegen" Ihren Kopf nach hinten, um die gewünschte Begehen.
git rebase --no-autostash
als gut.Dieses schema zeigt, welcher Befehl was macht. Wie Sie sehen können gibt es
reset && checkout
ändern Sie dieHEAD
.git reflog
, das ist genau das was ich brauchteAUA! Dies scheint alles schrecklich kompliziert... gibt es nicht einen einfachen Befehl, nur bringt Sie einen Schritt zurück in den Prozess? Wie wenn man aus der version 1.1 in Ihr Projekt wieder auf version 1.0? Ich würde etwas erwarten wie: git stepback_one_commit oder so....
es ist:
git reset HEAD^
- hart`Ja, es ist schrecklich kompliziert... und ein perfektes Beispiel dafür, wie wenig Rücksicht Experten haben für Menschen, die gerade erst anfangen. Bitte Lesen Sie meine Antwort hier, und auch das Buch, das ich empfehlen. Git ist NICHT etwas, Sie können nur abholen intuitiv. Und ich kann absolut sicher sein CodeWizard nicht so.
InformationsquelleAutor CodeWizard
Wenn Sie wollen "uncommit", lösche das Letzte commit-Nachricht, und setzen Sie die modifizierten Dateien wieder in Inszenierung, verwenden Sie den Befehl:
--soft
zeigt an, dass die nicht übernommenen Dateien beibehalten werden sollen als Dateien im Gegensatz zu--hard
würde Sie vernichten.HEAD~1
ist das Letzte commit. Wenn Sie zurücksetzen möchten 3 verpflichtet, die Sie nutzen könntenHEAD~3
. Wenn Sie möchten, um rollback zu einer bestimmten revision-Nummer, die man auch tun könnte, ist, dass mit Hilfe seiner SHA-hash.Dies ist ein sehr nützlicher Befehl, in Situationen, in denen Sie begangen, um die falsche Sache, und Sie rückgängig machen wollen, die letzten commit.
Quelle: http://nakkaya.com/2009/09/24/git-delete-last-commit/
InformationsquelleAutor Stephen Ostermiller
Ich habe versucht, eine Menge von Möglichkeiten, um wiederherstellen lokale änderungen im Git, und es scheint, dass dies funktioniert am besten, wenn Sie nur wollen, um wieder auf den neuesten commit state.
Kurze Beschreibung:
git revert
tut.git checkout <commithashcode>
tut.Fand ich eine viel bequemer und einfacher Weg, das zu erreichen die Ergebnisse oben:
wo KOPF auf die neueste verpflichten, an Sie den aktuellen Zweig.
Es ist der gleiche code wie boulder_ruby vorgeschlagen, aber ich habe
git add .
vorgit reset --hard HEAD
zu löschen, alle neu erstellten Dateien seit der letzten übertragung, da dies ist, was die meisten Leute erwarten, dass ich glaube, wenn das zurücksetzen auf das Letzte commit.InformationsquelleAutor Roman Minenok
Können Sie dies tun, indem Sie die folgenden zwei Befehle:
Wird es nehmen Sie Ihre Vorherige Git commit.
Wenn Sie möchten, um Ihre änderungen beizubehalten, die Sie auch verwenden können:
Dann wird es sichern Sie Ihre änderungen.
Ein detail für mich war, dass ich verloren die diffs .. das wollte ich halten, um zu sehen, was ich getan hatte, in den commit, der hat nicht funktioniert. Also das nächste mal würde ich nur sparen, Daten vor der Erteilung dieser reset-Befehl
Dies war der einzige Weg für mich rückgängig zu machen ist eine schlechte Zusammenführen, wiederherstellen hat nicht funktioniert in diesem Fall. Danke!
InformationsquelleAutor kiran boghra
OK, geht zurück zum vorherigen commit im git ist ganz einfach...
Wieder , ohne zu halten die änderungen:
Wieder mit halten die änderungen:
Erklären: mit git-reset, können Sie zurücksetzen, um einen bestimmten Zustand, ist es üblich, verwenden Sie es mit einem commit-hash, wie Sie oben sehen.
Aber wie Sie sehen, der Unterschied ist mit den zwei Fahnen
--soft
und--hard
standardmäßiggit reset
mit--soft
Flagge, aber es ist eine gute Praxis, immer mit der fahne, erkläre ich jede fahne:- weichen,
Den default-flag, wie Sie erklärt, nicht zur Verfügung stellen müssen, es nicht ändern Sie die Arbeitsgruppe Baum, aber alle hinzufügen, änderungen an Dateien bereit, zu Begehen, so gehen Sie zurück, um die commit-status, die änderungen an Dateien bekommen unstaged.
--hard
Seien Sie vorsichtig mit dieser Option, Sie setzt die arbeiten Baum und alle änderungen nachverfolgt Dateien und alles wird Weg sein!
Ich auch das Bild unten, das kann passieren, im realen Leben arbeiten mit git:
InformationsquelleAutor Alireza
Nichts hier war für mich abgesehen von dieser exakten Kombination:
Schlüssel hier ist, zwingen, push, keine zusätzlichen commit/commit-Nachrichten etc.
InformationsquelleAutor serdarsenay
Sagen, Sie haben die folgenden commits in eine text-Datei mit dem Namen
~/commits-to-revert.txt
(ich habegit log --pretty=oneline
um Sie zu bekommen)Erstellen Sie eine Bash shell-Skript zum wiederherstellen jeder von Ihnen:
Dieser kehrt alles wieder in den vorherigen Zustand, einschließlich Datei-und Verzeichnis-Kreationen und Löschungen, Begehen Sie in Ihrer Filiale und behalten Sie die Geschichte, aber Sie haben es wieder auf die gleiche Datei-Struktur. Warum Git nicht
git revert --to <hash>
ist mir schleierhaft.git revert HEAD~3
zu entfernen, die letzten 3 commitsNein, das ist nicht richtig. Dieser Befehl wird das zurücksetzen der Begehen, ist der Dritte Großeltern des KOPFES (nicht die letzten drei commits).
Ok danke für die info. Würde
git revert -n master~3..master~1
Arbeit ? (Gesehen von kernel.org/pub/software/scm/git/docs/git-revert.html)Das hört sich gut an, ist sicher eine hässliche syntax, aber ist es nicht? Ich habe immer gefunden, Check-out die commit-ich möchte auf "wiederherstellen" und dann zu Begehen, die mehr intuitiv.
Es gibt einen viel einfacher Weg, dies jetzt zu tun, als mit einem Skript wie dieses, nur mit
git revert --no-commit <start>..<end>
, weilgit revert
übernimmt ein commit-Auswahl in neue (oder alle?) Versionen von Git. Beachten Sie, dass der start der Reihe nicht rückgängig machen.InformationsquelleAutor Lance Caraccioli
Zusätzliche Alternativen zu Jefromi Lösungen
Jefromi Lösungen sind definitiv die besten, und Sie sollten auf jeden Fall nutzen Sie. Aber der Vollständigkeit halber wollte ich auch zeigen, diese anderen, alternativen Lösungen, können auch verwendet werden, um ein revert commit (in dem Sinne, dass Sie erstellen Sie einen neuen commit rückgängig macht änderungen in vorherigen commit, genau wie das, was
git revert
tut).Klar zu sein, diese alternativen sind nicht der beste Weg, um wieder begeht, Jefromi Lösungen, aber ich möchte nur darauf hinweisen, dass auch diese anderen Methoden, das gleiche zu erreichen wie
git revert
.Alternative 1: Hard-und Soft-Resets
Dies ist eine sehr leicht modifizierte version von Charles Bailey, der die Lösung für Wieder eine Begehung durch einen SHA-hash in Git?:
Dieser funktioniert im Grunde durch die Verwendung der Tatsache, dass soft-resets verlassen wird der Zustand der vorherigen commit-inszeniert in der index/staging-Bereich, die Sie dann verpflichten.
Alternative 2: Löschen der Aktuellen Struktur und mit dem Neuen zu Ersetzen
Diese Lösung kommt von svick die Lösung Kasse alt Begehen und machen es zu einem neuen commit:
Ähnlich wie alternative #1, diese reproduziert der Staat
<commit>
im aktuellen Arbeitsverzeichnis kopieren. Es ist notwendig, dies zu tungit rm
ersten weilgit checkout
wird nicht entfernen Sie die Dateien, die Hinzugefügt wurden, seit<commit>
.in Alternative 2, Punkte stehen für das, was in diesen Befehlen?
die Punkte Kennzeichnen eine Datei-Pfad, in diesem Fall das aktuelle Verzeichnis, es ist also davon ausgegangen, laufen Sie, dass es von der Wurzel Ihrer Arbeitskopie.
Die Warnung wiederholt sich mehrere Male in der Antwort, aber könnte jemand hinzufügen warum dies sind nicht der beste Weg, — im Vergleich zu so etwas wie
git revert HEAD~2..HEAD
von @Cascabel (@Jefromi) verbunden Lösung. Ich bin nicht zu sehen, die problem.InformationsquelleAutor
Vorausgesetzt, Sie reden über master und auf, die jeweiligen Zweig (das heißt, dies könnte eine Zweig mit Ihnen):
Fand ich die Antwort in einen blog-post (jetzt nicht mehr vorhanden)
Beachten Sie, dass dieses Zurücksetzen und Zwingen die änderung auf der Fernbedienung, so dass, wenn andere in Ihrem team haben, die bereits von git gezogen, verursachen Sie Probleme für Sie. Werden Sie zu zerstören, die änderung der Geschichte, ist ein wichtiger Grund, warum Menschen verwenden Sie git in den ersten Platz.
Besser wiederherstellen (siehe andere Antworten), als reset.
Wenn Sie ein ein-Mann-team, dann ist es wahrscheinlich egal.
Der link ist kaputt.
Das ist bedauerlich. Ich mailte die blogger - hoffentlich hat er noch!
href="http://web.archive.org/web/20150411085146/http://lrotherfield.com/blog/delete-remote-git-repo-to-specific-commit" >web.archive.org/web/20150411085146/http://lrotherfield.com/blog/...
Die push-syntax fehlt von den meisten anderen Vorschläge, wie dieses Problem zu beheben. Hat Super funktioniert.
InformationsquelleAutor markreyes
Hier ist ein viel einfacher Weg zurück zu einem vorherigen commit (und haben es in einen ungebunden Zustand, zu tun, was immer Sie mögen):
Also, keine Notwendigkeit für commit-ids und so weiter 🙂
Das ist, weil, Sie hatten ungebunden änderungen. Stash/zurücksetzen und dann funktioniert es ohne Fehler.
InformationsquelleAutor Paul Walczewski
Nachdem alle änderungen, wenn Sie drücken Sie alle diese Befehle, die Sie haben könnten, zu verwenden:
Nicht nur
git push
.Manchmal ist das, was Sie wollen. Beispiel: engagierte und schob mehrere commits auf den falschen Zweig (Zweig A). Nach cherry-picking zu Zweig B, ich möchte diese commits entfernt von der Filiale A. ich möchte nicht zurückkehren, da der revert später angewendet werden, wenn Filiale A und B werden zusammengeführt. Mache ein reset --hard <commitId> in der Abteilung a, gefolgt von Einem force push entfernt diese verpflichtet, aus dem Zweig, während er Sie in den Zweig B. ich kann Weg mit diesem, weil ich weiß, niemand sonst ist die Entwicklung auf Zweig A.
Danke! Ich konnte nicht herausfinden, wie man die remote-branch auf meinem lokalen branch, die Nur benötigt, um einen force push.
InformationsquelleAutor sivi
Gibt es einen Befehl (nicht Teil der Kern-Git, aber es ist in der git-extras Paket) speziell für das zurücksetzen und Inszenierung alten begeht:
Pro die Mann Seite, es kann auch als solches verwendet werden:
InformationsquelleAutor Shadow Man
Können Sie füllen Sie alle diese ersten Schritte sich selbst und schieben Sie zurück zum git-repo.
Ziehen Sie die neueste version Ihres repository von Bitbucket mit der
git pull --all
Befehl.Führen Sie das git-log-Befehl mit -n 4 vom terminal aus. Die Zahl nach der Option-n legt die Anzahl der commits in der log ab dem letzten commit in Ihrer lokalen Geschichte.
$ git log -n 4
Zurücksetzen der Leiter der repository-Historie mit Hilfe der
git reset --hard HEAD~N
wobei N die Anzahl von commits, die Sie wollen, nehmen Sie den Kopf zurück. Im folgenden Beispiel wäre der Kopf wieder einverpflichten, bis zum letzten commit in das repository-Historie:
Drücken Sie den Wechsel zu git-repo mit
git push --force
zu zwingen schiebendie ändern.
Wenn Sie möchten, dass git-repository zu einem vorherigen commit
InformationsquelleAutor Nanhe Kumar
Wieder letzten Begehen, und ignorieren Sie alle lokalen änderungen:
InformationsquelleAutor Mohammed Irfan Tirupattur
Wählen Sie den gewünschten Begehen, und überprüfen Sie es von
bis Sie die erforderliche Begehen. Um den KOPF Stelle, um das,
oder
git reset --hard HEAD~2
oder was auch immer.Auch, klar zu sein,
git show HEAD
entspricht nur mitgit log HEAD -1
.InformationsquelleAutor tonythomas01
Halten die änderungen aus dem vorherigen commit auf den KOPF und bewegen zum vorherigen Begehen, tun:
Wenn änderungen sind nicht erforderlich, von der vorherigen übertragung auf den KOPF und nur alle änderungen verwerfen, tun:
InformationsquelleAutor Vishnu Atrai
Vollständig zu reinigen ein coder ' s Verzeichnis von einigen zufälligen Veränderungen, die wir verwendet haben:
Nur
git reset --hard HEAD
loswerden änderungen, aber es wird nicht loszuwerden, die "neuen" Dateien. In Ihrem Fall würden Sie versehentlich gezogen ein wichtiger Ordner irgendwo zufällig, und alle Dateien, die behandelt wurden, als neue von Git, so einreset --hard
trifft nicht zu beheben. Durch ausführen dergit add -A .
vorher, es explizit verfolgt Sie alle mit git, ausgelöscht werden, indem der reset.InformationsquelleAutor Chris Moschini
Dies ist eine weitere Möglichkeit, um direkt wieder auf einen aktuellen Begehen
Es direkt löscht alle änderungen, die Sie machen, die seit dem letzten commit.
PS: Es hat ein kleines problem; es löscht auch alle, die Sie vor kurzem gespeichert stash änderungen. Ich glaube, das sollte in den meisten Fällen keine Rolle.
Warum, oh warum clearing-stash? Zusätzlich dazu, dass eine nicht-Lösung, dies ist tatsächlich schädlich. Lesen Sie den ersten Satz sofort die Frage, erlischt die stash-Lösung (was nützlich sein könnte, NUR das zurücksetzen auf das LETZTE commit).
InformationsquelleAutor Point Networks
Ich glaube, manche Menschen kommen auf diese Frage wissen zu wollen, wie rollback verpflichtet, Veränderungen, die Sie vorgenommen haben, in Ihrem Meister - also alles wegwerfen, und gehen Sie zurück zu origin/master, in dem Fall, tun Sie Folgendes:
https://superuser.com/questions/273172/how-to-reset-master-to-origin-master
InformationsquelleAutor nevster
Zurückkehren, ist der Befehl zum zurücksetzen des commits.
Beispiel:
git revert 2h3h23233
Ist es, die fähig-Bereich aus dem KOPF, wie unten. Hier 1 sagt "revert letzten commit."
git revert HEAD~1..HEAD
tun, und dann
git push
InformationsquelleAutor Sireesh Yarlagadda
Revert Letzten Commit :
HEAD
ist einfach ein Verweis auf den aktuellen commit (neueste Version) auf den aktuellen branch. Es kann nur eine einzigeHEAD
zu einem bestimmten Zeitpunkt.Zurücksetzen auf einen Älteren Commit :
Der Schnellste Weg zur Wiederherstellung einer alten version ist die Verwendung des
reset
Befehl:Diese werden Rückspulen Ihr KOPF Zweig in der angegebenen version. Alle commits, die kam, nachdem dieser version sind effektiv rückgängig gemacht; dein Projekt ist genau so, wie es war an diesem Punkt in der Zeit.
Den reset-Befehl kommt mit ein paar Optionen, die interessanter sind die
--soft
Flagge. Wenn Sie es verwenden anstelle von--hard
, Git halten alle änderungen in diesen "undone" verpflichtet als lokale änderungen.Wiederherstellen einer Revision in einem Neuen Lokalen Zweig
Wie gesagt, mit dem reset-Befehl auf Ihrem
HEAD
branch ist eine ziemlich drastische Maßnahme: es wird entfernen Sie alle commits (in diesem Zweig), die kam nach der angegebenen revision. Wenn Sie sicher sind, dass dies ist, was Sie wollen, ist alles in Ordnung.Allerdings gibt es auch eine sicherer Weise in den Fall, Sie es vorziehen, zu verlassen Ihre aktuelle KOPF, Zweig unberührt. Da die "Zweige" sind so Billig und einfach in Git, wir können einfach erstellen Sie einen neuen Zweig, der fängt an, die alte revision:
Normalerweise, wird der checkout-Befehl wird verwendet, um nur switch-Verzweigungen. Sofern allerdings der -b-parameter, Sie können auch lassen es einen neuen branch erzeugen (benannt alt-Projekt-Staat in diesem Beispiel). Wenn Sie nicht wollen, es zu starten an der aktuellen HEAD-revision, müssen Sie zusätzlich eine commit-hash - die alte Projekt-revision, die wir wiederherstellen wollen.
Haben Sie nun einen neuen Zweig namens alt-Projekt-Staat spiegelt die alte version Ihres Projekts - ohne Sie zu berühren oder sogar entfernen Sie alle anderen begeht oder Zweige.
InformationsquelleAutor Lyes CHIOUKH
Wenn die situation ist ein dringend, und Sie wollen einfach nur zu tun, was der Fragesteller fragte quick-and-dirty Weg, vorausgesetzt, Ihr Projekt unter das Verzeichnis "mein Projekt":
Kopieren Sie das ganze Verzeichnis und nennen es etwas anderes, wie "mein Projekt - Kopie"
Tun:
Haben Sie dann zwei Versionen auf Ihrem system... können Sie prüfen, kopieren oder ändern von Dateien von Interesse, oder was auch immer, aus dem vorherigen commit. Sie kann komplett verwerfen Sie die Dateien unter "mein Projekt - Kopie", wenn Sie sich entschieden haben, die neue Arbeit war, nirgendwo zu gehen...
Die offensichtliche Sache, wenn Sie wollen, zu tragen auf dem Stand der Projekt, ohne tatsächlich verwerfen die Arbeit, da dieser abgerufen Begehen ist, benennen Sie Ihr Verzeichnis wieder: Löschen Sie das Projekt mit den abgerufenen commit (oder geben Sie einen temporären Namen) und benennen Sie Ihre "mein-Projekt - kopieren" - Verzeichnis wieder in "mein Projekt". Dann wahrscheinlich noch ein commit ziemlich bald.
Git ist eine brillante Schöpfung, aber Sie können sich nicht einfach "Holen Sie es auf der fliege": auch Menschen, die versuchen, es zu erklären viel zu oft davon ausgehen Vorkenntnisse von anderen VCS [Versionskontrollsysteme] und vertiefen sich viel zu tief, viel zu schnell, und Begehen andere Verbrechen, wie die Verwendung von austauschbaren Begriffe für "Check-out" - in einer Weise, die manchmal erscheinen fast berechnet zu verwirren Anfänger.
Ersparen sich viel stress, den Sie haben ziemlich viel zu Lesen, ein Buch über Git - ich empfehle "Versionskontrolle mit Git". Und wenn Sie mir Vertrauen können (oder eher meine Narben), wenn ich sage "müssen", es folgt, dass Sie könnte genauso gut tun es JETZT. Viel von der Komplexität von Git kommt aus verzweigen und dann erneute Zusammenführung. Aber aus Ihrer Frage, es gibt keinen Grund, warum sollten die Menschen blendet Sie mit der Wissenschaft.
Vor allem, wenn, zum Beispiel, dies ist eine verzweifelte situation und du bist ein Neuling mit Git!
PS: Ein anderer Gedanke: Es ist (jetzt) eigentlich ganz einfach zu halten die Git-repositories ("Repos") in einem anderen Verzeichnis als die, die mit den Dateien arbeiten. Dies würde bedeuten, dass Sie nicht kopieren Sie den gesamten Git repository mit der oben genannten quick & dirty Lösung. Siehe die Antwort von Friteuse mit --separate-git-dir hier. Gewarnt werden, aber: Wenn du ein "separates Verzeichnis" repository, das Sie kopieren Sie nicht, und Sie tun einen hard-reset, werden alle Versionen nach dem reset commit wird für immer verloren sein, es sei denn, Sie haben, wie Sie sollte unbedingt regelmäßig gesichert repository, vorzugsweise in die cloud (z.B. Google Drive) unter anderen stellen.
InformationsquelleAutor mike rodent
Versuchen Sie das zurücksetzen auf die gewünschte commit -
git reset <COMMIT_ID>
(um zu prüfen, COMMIT_ID verwenden
git log
)Dieser setzt alle geänderten Dateien zu un-Addierte Zustand.
Nun können Sie
checkout
alle un-added Dateien vongit checkout .
Überprüfen
git log
zu überprüfen, ob Ihre änderungen.UPDATE
Wenn Sie einzige commit in das Repository, versuchen
git update-ref -d HEAD
InformationsquelleAutor optimistanoop
Als Ihr begeht geschoben werden, aus der Ferne, die Sie brauchen, um Sie zu entfernen. Lassen Sie mich annehmen, dass Ihr Zweig ist zu entwickeln und es über geschoben Herkunft.
Müssen Sie zuerst entfernen Sie entwickeln sich aus Herkunft:
Dann brauchen Sie, um zu entwickeln, um den status, den Sie wollen, lassen Sie mich davon ausgehen, das commit-hash ist EFGHIJK:
Schließlich, schieben entwickeln wieder:
InformationsquelleAutor George Ninan
Ich habe ähnliche Problem und wollte wieder zurück zu früheren Commit. In meinem Fall war ich nicht intetessered zu halten neuere Begehen, daher habe ich verwendet
Hard
.Dies ist, wie ich es gemacht habe:
Diese wieder auf lokale repository, hier nach der Verwendung
git push -f
aktualisiert remote-repository.InformationsquelleAutor maytham-ɯɐɥʇʎɐɯ
Wenn Sie möchten, zu korrigieren einige Fehler im letzten commit eine gute alternative wäre mit git commit --amend Befehl. Wenn der Letzte commit ist nicht spitz, die von jeder Referenz, dies wird den trick tun, wie Sie es schaffen, einen commit mit den gleichen Eltern als die letzten commit. Wenn es keine Referenz auf den letzten commit, wird es einfach verworfen werden, und diese zu Begehen, werden die letzten commit. Dies ist eine gute Möglichkeit zur Korrektur verpflichtet, ohne Rückgriff verpflichtet. Allerdings hat es seine eigenen Grenzen.
InformationsquelleAutor Upul Doluweera