Wie Mach ich das rückgängig die jüngsten lokalen commits in Git?
Ich versehentlich begangen, die falschen Dateien zu Git, aber ich habe nicht geschoben, die sich verpflichten, die server noch.
Wie kann ich das rückgängig diejenigen commits vom local repository?
Warnung: dies sollten Sie nur tun, wenn Sie noch nicht geschoben, die sich verpflichten, sich an abgelegenen, sonst werden Sie mess up die Geschichte von Menschen, die bereits zog das Begehen von der Fernbedienung!
Hier ist eine sehr klare und Gründliche post zum Rückgängigmachen Dinge im git direkt von Github.
Bevor Sie veröffentlichen eine neue Antwort, die der Ansicht sind, dass bereits 65+ Antworten für diese Frage. Stellen Sie sicher, dass Ihre Antwort trägt, was nicht unter den vorhandenen Antworten.
Sie wissen, was git braucht?
Das kann getan werden, mit Git ' s
Hier ist eine sehr klare und Gründliche post zum Rückgängigmachen Dinge im git direkt von Github.
Bevor Sie veröffentlichen eine neue Antwort, die der Ansicht sind, dass bereits 65+ Antworten für diese Frage. Stellen Sie sicher, dass Ihre Antwort trägt, was nicht unter den vorhandenen Antworten.
Sie wissen, was git braucht?
git undo
, das ist es. Dann der Ruf git hat für die Handhabung von Fehlern, die uns sterblichen verschwindet. Umsetzung durch drücken auf den aktuellen Status des git-stack vor dem ausführen alle git
Befehl. Es würde die Leistung beeinträchtigen, also am besten wäre es, fügen Sie ein config-flag, ob es zu aktivieren.Das kann getan werden, mit Git ' s
alias
feature: git-scm.com/book/en/v2/Git-Basics-Git-AliasesInformationsquelleAutor |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen commit rückgängig machen und wiederherstellen
git status
, so müssen Sie diese erneut, bevor Sie zu Begehen). Wenn Sie nur wollen hinzufügen weitere änderungen zu der vorherigen commit-oder ändern der commit-Nachricht1, Sie könnte verwendengit reset --soft HEAD~
statt, die wiegit reset HEAD~
(woHEAD~
ist das gleiche wieHEAD~1
), lässt aber Ihre vorhandene Veränderungen inszeniert.git add
alles, was, die Sie einschließen möchten in Ihrem neuen commit.reset
kopiert den alten Kopf zu.git/ORIG_HEAD
;commit
mit-c ORIG_HEAD
öffnen Sie einen editor, der enthält zunächst die log-Meldung aus der alten übernehmen und ermöglicht es Ihnen, um es zu Bearbeiten. Wenn Sie nicht brauchen, um die Nachricht zu Bearbeiten, können Sie mit der-C
option.Aber Vorsicht, dass, wenn Sie Hinzugefügt haben alle neuen änderungen in den index ein, mit
commit --amend
wird, fügen Sie Sie zu Ihrem früheren commit.Wenn der code bereits auf deinen server gepusht und Sie über die Berechtigungen zu überschreiben, die Geschichte (rebase), dann:
Können Sie auch einen Blick auf diese Antwort:
Wie bewegen Sie den KOPF zurück zu einer vorherigen Position? (Freistehende Leiter) & Rückgängig verpflichtet
Die obige Antwort wird Ihnen zeigen
git reflog
die verwendet werden, um herauszufinden, was ist der SHA-1 -, die Sie wiederherstellen möchten,. Sobald Sie festgestellt, dass die Stelle, auf die Sie rückgängig machen möchten, zu verwenden, die Reihenfolge der Befehle wie oben erklärt.1 Beachten Sie jedoch, dass Sie nicht brauchen, um zurücksetzen zu einem früheren Begehen, wenn Sie nur einen Fehler gemacht in Ihrem commit-Nachricht. Die einfachere Variante ist
git reset
(to unstage alle änderungen, die Sie vorgenommen haben, seit) und danngit commit --amend
, öffnen Sie Ihre Standard-commit-message editor pre-besiedelten mit dem letzten commit-Nachricht.git checkout theRightBranch
mit allen änderungen, die Stufen. Als ich gerade zu tun hatte.Wenn Sie DOS, statt
git reset --soft HEAD^
benötigen Siegit reset --soft HEAD~1
. Das ^ ist eine Fortsetzung Zeichen in DOS so funktioniert es nicht richtig. Auch--soft
ist der Standard, so können Sie es weglassen, wenn Sie mögen, und einfach sagengit reset HEAD~1
.Auch in der zsh haben Sie zu zitieren ^, so
git reset --soft 'HEAD^'
... zumindest habe ich(Korrektur zu dem, was ich oben schrieb;
--mixed
ist die Standardeinstellung.--mixed
Mitteln zu halten, der die geänderten Dateien, aber nicht halten Sie in den index.--soft
würde immer die geänderten Dateien und halten Sie Sie in den index, da Sie einfach vor den veränderten Begehen. Sorry für die Verwirrung.)Benutzer der zsh könnten:
zsh: no matches found: HEAD^
- Sie brauchen, um zu entkommen ^ alsogit reset --soft HEAD\^
InformationsquelleAutor
Rückgängigmachen einer commit ist ein wenig beängstigend, wenn Sie nicht wissen, wie es funktioniert. Aber es ist eigentlich erstaunlich einfach, wenn Sie verstehen.
Sagen, Sie haben diese, wo C ist dein KOPF und (F) ist der Zustand Ihrer Dateien.
Du willst nuke commit C und nie wieder sehen. Sie tun dies:
Ist das Ergebnis:
Nun B ist der KOPF. Weil Sie verwendet werden
--hard
Ihre Dateien zurückgesetzt werden, um Ihren Staat zu verpflichten, B.Ah, aber nehmen wir an, commit C war keine Katastrophe, sondern nur ein bisschen ab. Sie möchten die übergabe rückgängig, aber halten Sie Ihre änderungen für ein bisschen Bearbeiten, bevor Sie besser zu Begehen. Beginnend wieder von hier aus, mit C als KOPF:
Können Sie dies tun, verlassen der
--hard
:In diesem Fall ist das Ergebnis:
In beiden Fällen den KOPF ist nur ein Zeiger auf den aktuellen commit. Wenn Sie eine
git reset HEAD~1
Sie sagen, Git, um den KOPF-Zeiger wieder ein commit. Aber (es sei denn, Sie verwenden--hard
) verlassen Sie Ihre Dateien, wie Sie waren. So, jetztgit status
zeigt die änderungen, die Sie überprüft hatte, die in C. Sie haben nichts verloren!Für die leichteste Berührung, Sie können sogar rückgängig machen Begehen, aber lassen Sie Ihre Dateien und Ihre index:
Diese nicht nur Blätter, Ihre Dateien allein, es verlässt sogar Ihre index allein. Wenn Sie das tun
git status
Sie werden sehen, dass die gleichen Dateien sind im index als zuvor. In der Tat, gleich nach diesem Befehl könnten Siegit commit
und Sie würde nochmal die gleichen zu Begehen, die Sie gerade hatte.Eins noch: Angenommen, Sie zerstören verpflichten wie im ersten Beispiel, aber dann entdecken Sie es brauchte nach all? Pech gehabt, richtige?
NÖ, es gibt noch einen Weg, um es zurück. Geben Sie
git reflog
und Sie werden sehen, eine Liste der (teilweise) sich zu verpflichten, shas (das ist, hashes), die Sie verschoben haben, um in. Finden Sie die verpflichten Sie zerstört, und tun Sie dies:Haben Sie nun auferstanden, die verpflichten. Begeht nicht tatsächlich zerstört Git für rund 90 Tage, so können Sie in der Regel gehen Sie zurück und retten Sie nicht bedeuten, um Sie wieder loszuwerden.
git reset --hard HEAD^^
einmal. Ich verwenden die tilde ( ~ ) - notation, da das caret-Zeichen ( ^ ) - notation funktioniert nicht im DOS.Ein weiterer netter Tipp: Sie können re-befestigen Sie den Zweig auf den commit, der Sie entfernt mit
git branch -f <branch> <commit-id>
. Erspart man sich, neu zu erstellen verpflichtet!Für einen git-Anfänger, es ist nicht klar, was der Unterschied ist zwischen den letzten beiden Optionen (--weich und oben). Die Erwähnung des index nicht helfen, wir wissen nicht wirklich, was das bedeutet noch. @nessur die Verbindung zwischen soft-und Strg-Z hat mir sehr geholfen! Aber ich verstehe immer noch nicht ganz verstehe ist der Unterschied zwischen den beiden Optionen.
Es ist viel besser erzählt werden, "warum" etwas funktioniert, als nur gesagt zu werden, die Antwort. Kudos zu dieser Beschreibung - es hat geholfen, 'get' git.
Fehlt ein entscheidender Punkt: Wenn die besagte verpflichten, vorher war 'gedrängt' auf der Fernbedienung, beliebige "undo" - operation, egal wie einfach, werden Sie verursachen enorme Schmerzen und leiden für den rest der Benutzer, die diese verpflichten, in Ihre lokale Kopie, wenn Sie ein 'git pull' in der Zukunft. Also, wenn der commit schon war 'geschoben', tun Sie dies: git revert <bad-commit sha1-id> git push origin :
InformationsquelleAutor Ryan Lundy
Dieser dauerte eine Weile, um herauszufinden,, also vielleicht hilft es jemandem...
Gibt es zwei Möglichkeiten, um "rückgängig" deinen letzten commit, je nachdem, ob oder nicht Sie haben bereits Ihren commit öffentlichen (geschoben, um zu Ihrer remote-repository):
Wie rückgängig machen lokalen commit -
Sagen wir mal ich begangen lokal, aber jetzt wollen Sie zu entfernen, zu Begehen.
Wiederherstellen alles wieder so, wie es war vor dem letzten commit, wir müssen
reset
auf den commit vorHEAD
:Nun
git log
zeigen, dass unsere Letzte commit entfernt wurde.Wie rückgängig machen der öffentlichkeit Begehen
Wenn Sie bereits Ihr begeht öffentlichkeit, werden Sie wollen, um eine neue erstellen zu Begehen, welche die "zurücksetzen" die änderungen, die Sie in Ihrem vorherigen commit (aktuelle KOPF).
Ihre änderungen nun rückgängig gemacht werden und bereit für Sie zu verpflichten:
Für mehr Infos, check-out Git Grundlagen Zum Verhängnis Dinge
git revert HEAD^
ist nicht die frühere, ist der Vorherige von der vorherigen. Ich habe :git revert HEAD
und drücken Sie dann erneut und es funktionierte 🙂InformationsquelleAutor Andrew
Hinzufügen/entfernen von Dateien, um die Dinge so, wie Sie wollen:
Dann ändern Sie die commit:
Vorherigen, fehlerhaften commit bearbeitet werden, um die neue index-Staat - in anderen Worten, es wird sein, wie Sie noch nie den Fehler gemacht in den ersten Platz.
Beachten Sie, dass Sie sollten dies nur tun, wenn Sie nicht gedrängt noch. Wenn Sie gedrückt haben, dann müssen Sie sich nur verpflichten müssen, eine Korrektur normal.
git commit --amend
und was ich wirklich tun sollte ist einegit commit
?wenn Sie versehentlich geändert haben, verwenden
git reset --soft <oldref>
, wo oldref ist die commit-ID, bevor die änderung. Sie könnengit reflog
zu identifizieren, die alten commit-ID. Dies wird rückgängig gemacht, die Auswirkungen der änderung, aber lassen Sie änderungen inszeniert. Nur dann nichtgit commit
zu Begehen, als eine regelmäßige Begehen.git commit --amend stellt den aktuellen Baum (ie, inszeniert Veränderungen) in einem commit, überschreiben aktuelle KOPF. Nach diesem Punkt, Sie sind nicht als inszenierte mehr, weil Sie Teil der commit (ie, git diff --cached leer ist), aber Sie sind nicht "entfernt" werden oder "verloren".
Die option
--amend
war die tricks, um zu vermeiden, eine Fälschung zu Begehen!InformationsquelleAutor bdonlan
oder
Achtung: Der obige Befehl wird dauerhaft entfernen Sie die änderungen an der
.java
- Dateien (und andere Dateien), die Sie verpflichten wollten.Den
hard reset
zuHEAD-1
wird Ihre Arbeitskopie auf den Stand des Commits vor Ihr Unrecht Begehen.Sie können mit "git stash save" Arbeitskopie änderungen, führen Sie einen hard-reset und dann "git stash pop" um Sie zurück zu bekommen, aber ich nehme an, ein soft-reset wäre einfacher.
git commit -a -m ""
odergit commit -am ""
natürlich! :]Eine weitere 'shortcut' stash; wenn Sie wollen unstage alles (rückgängig machen git add), nur
git stash
, danngit stash pop
InformationsquelleAutor Lennart Koopmann
Zu ändern, die Letzte commit
Ersetzen Sie die Dateien in den index:
Dann, wenn es einem privaten Zweig, ändern die commit:
Oder, wenn es eine gemeinsame Niederlassung, stellen Sie einen neuen commit:
(zum ändern einer vorherigen übertragung, verwenden Sie die awesome interactive rebase)
ProTip™: Hinzufügen
*.class
zu einem gitignore zu stoppen, dies geschieht wieder.Zu revert commit
Änderung ein commit ist die ideale Lösung, wenn Sie müssen ändern Sie in der letzten commit -, sondern eine allgemeinere Lösung ist
reset
.Können Sie zurücksetzen git zu jedem commit mit:
Wo
N
ist die Anzahl von commits, die vorHEAD
, und@~
zurückgesetzt auf den vorherigen commit.So, statt der änderung der commit, den Sie verwenden könnten:
Check-out
git help reset
, speziell die Abschnitte zu--soft
--mixed
und--hard
für ein besseres Verständnis von dem, was diese tut.Reflog
Wenn Sie oben verwirren, können Sie immer die reflog zu finden, sank verpflichtet:
git revert
ist ein separater Befehl - was im Grunde 'setzt' eine einzige commimt.InformationsquelleAutor Zaz
Verwenden
git revert <commit-id>
Um die commit-ID, verwenden Sie einfach
git log
Was bedeutet das, Kirsche wählen Sie die Begehen? In meinem Fall war ich auf dem falschen Zweig, wenn ich die bearbeitete Datei. Beging ich es dann merkte, ich war in der falschen Filiale. Mit "git reset --soft HEAD~1" hat mich wieder auf, kurz bevor die commit -, aber jetzt, wenn ich in der Kaufabwicklung die korrekte Zweig, wie ich die änderungen rückgängig machen, um die Datei in der falschen Branche aber stattdessen machen Sie (in der gleichen Datei Namen) in der richtigen Branche?
Ich habe gerade genutzt
git revert commit-id
arbeitete wie ein Charme. Natürlich, dann müssen Sie schieben Sie Ihre änderungen.Ich glaube, das wäre
git cherry-pick <<erroneous-commit-sha>>
@astronomerdave. Aus, Herr Fast-2-Jahre-Spät-um-die-Party.Statt cherry-pick benutzen Stellungswechsel. Denn es ist fortschrittliche cherry-picking
InformationsquelleAutor Jaco Pretorius
Wenn Sie planen, lösen Sie eine lokale Begehen vollständig, was auch immer Sie ändern, Sie hat den commit, und wenn Sie don ' T worry, etwas über Sie, dass, nur tun Sie den folgenden Befehl.
(Dieser Befehl ignoriert Ihre gesamte Begehen und Ihre änderungen werden verloren vollständig von Ihrem lokalen arbeiten Baum). Wenn Sie rückgängig machen möchten, Ihr verpflichten, aber Sie wollen, dass Ihre änderungen in der staging area, bevor Sie zu Begehen wie nach
git add
) führen Sie dann den folgenden Befehl aus.Nun Ihre engagierte Dateien kommen in den staging-Bereich. Nehme an, wenn Sie möchten, den hintergrund verweisen auf die Dateien, weil die Sie Bearbeiten müssen einige falsche Inhalte, führen Sie dann den folgenden Befehl
Nun verpflichtet, Dateien zu kommen, von der inszenierten Fläche in der unstaged Bereich. Nun-Dateien sofort zu Bearbeiten, so was auch immer Sie verändern, Sie wollen zu gehen, Bearbeiten Sie und fügte hinzu, es und einen frischen/neuen commit.
Mehr
InformationsquelleAutor Madhan Ayyasamy
Wenn Sie Git Extras installiert ist, können Sie laufen
git undo
rückgängig machen, den neuesten Begehen.git undo 3
wird rückgängig gemacht, die letzten 3 commits.InformationsquelleAutor nickf
Wollte ich rückgängig machen die letzten 5 commits in unserem gemeinsamen repository. Ich sah die revisions-id, die ich wollte, um rollback zu. Dann tippte ich die folgenden.
Ja rollback ist gefährlich. Stellen Sie sicher, dass Ihre Arbeitskopie in dem gewünschten Zustand ist, bevor Sie drücken. Wenn man dann die unerwünschten begeht wird unwiderruflich gelöscht.
"Genau wie in der realen Welt, wenn Sie wollen, um die Geschichte umzuschreiben, müssen Sie eine Verschwörung: jeder hat sein 'in' auf die Verschwörung (zumindest alle, die Sie kennt, über die Geschichte, d.h. alle, die schon immer zog aus der Branche)." Quelle: stackoverflow.com/a/2046748/334451
InformationsquelleAutor neoneye
Bevorzuge ich
git rebase -i
für diesen job, da eine schöne Liste erscheint, wo ich auswählen kann das verpflichtet zu entledigen. Es ist vielleicht nicht so direkt, wie einige andere Antworten hier, aber es ist einfach fühlt sich richtig.Wählen Sie, wie viele commits, die Sie auflisten möchten, dann rufen Sie wie folgt aus (zum eintragen der letzten drei)
Sample-Liste
Dann Git entfernen, entfernen Sie verpflichtet, für jede Zeile, die Sie entfernen.
InformationsquelleAutor Steven Penny
Zu beheben, wie die vorherigen lokalen commit -
Mithilfe von git-gui (oder ähnlich), um einen
git commit --amend
. Über die GUI können Sie hinzufügen oder entfernen einzelner Dateien aus dem commit. Sie können auch ändern, die commit-Nachricht.Wie rückgängig machen der vorherigen lokalen commit -
Nur setzen Sie Ihre Niederlassung an der vorherigen Position (zum Beispiel mittels
gitk
odergit rebase
). Dann erneut Ihre änderungen aus einer gespeicherten Kopie. Nach der garbage collection in Ihrem lokalen repository, es wird sein, wie der unerwünschte Begehen nie passiert. Alle, die in einem einzigen Befehl verwendengit reset HEAD~1
.Wort der Warnung: Unvorsichtigen Gebrauch von
git reset
ist ein guter Weg, um Ihre Arbeitskopie in einen verwirrenden Zustand. Ich empfehle, Git-Neulinge vermeiden, wenn Sie können.Wie rückgängig machen der öffentlichkeit Begehen
Führen Sie eine reverse-cherry pick (git-revert) die änderungen rückgängig zu machen.
Wenn Sie noch nicht gezogen, andere änderungen auf Ihrem Zweig, Sie können einfach tun...
Dann drücken Sie die aktualisierte branch auf das gemeinsam genutzte repository.
Die commit-Historie zeigen beide verpflichtet, getrennt.
Erweitert: Korrektur der private Niederlassung in öffentlichen repository
Das kann gefährlich werden-seien Sie sicher, dass Sie über eine lokale Kopie der Branche repush.
Beachten Sie auch: Sie wollen nicht, dies zu tun, wenn jemand anderes kann die Arbeit auf dem Zweig.
Clean up your branch lokal dann repush...
Im normal Fall, werden Sie wahrscheinlich brauchen sich keine sorgen über Ihre private-branch einen commit-Geschichte wird makellos. Drücken Sie einfach auf eine Nachfolge-commit (siehe "Rückgängigmachen einem öffentlichen commit' oben), und später, ein squash-merge zum ausblenden der Geschichte.
gitk --all $(git reflog | cut -c1-7)&
kann hilfreich sein für die Suche nach die Vorherige Version wenn Sie möchten rückgängig machen '--ändern " festlegen.Es sollte angemerkt werden, dass, wenn Sie versucht sind, zu entfernen geheimen Informationen, bevor man auf einem gemeinsamen repository, mache ich ein wiederherstellen helfen Ihnen nicht, weil die Daten weiterhin in der Geschichte in den vorherigen commit. Wenn Sie sicherstellen möchten, dass die änderung nie für andere sichtbar, die Sie verwenden müssen
git reset
Siehe auch: stackoverflow.com/a/30598953
Ich denke, dass 'private'/'public' würde mehr korrekt werden 'lokale'/'remote'.
Korrigieren private branch im remote-repository kann auch erfolgen, indem einfach
git push origin (branch_name) --force
InformationsquelleAutor
Wenn Sie haben sich verpflichtet, junk -, aber nicht gedrängt,
ODER
Wahrscheinlich erwähnenswert, dass anstelle von
HEAD~1
können Sie mit der eigentlichen hash angezeigtengit log --stat
oder durchgit reflog
- nützlich, wenn Sie brauchen, um "rückgängig" mehr als ein zu Begehen.InformationsquelleAutor
Wenn Sie möchten, um dauerhaft wieder rückgängig machen und Sie haben geklont einige repository -
Die commit-id kann gesehen werden, indem
Dann kannst du das tun -
Rückgängig machen Letzte änderungen, die Sie verwenden können
git reset --hard
, aber wenn Sie zu hart entfernt die letzten "n" verpflichtet, die Sie angeben, SHAInformationsquelleAutor
Auf SourceTree (GUI für GitHub), können Sie rechts-klicken Sie auf den "commit" - und "Reverse-Commit'. Dies sollte machen Sie Ihre änderungen rückgängig.
Auf dem terminal:
Alternativ können Sie verwenden:
Oder:
InformationsquelleAutor
Einen einzigen Befehl:
Es funktioniert großartig zum Rückgängigmachen der letzten lokalen commit!
Es sollte ohne Anführungszeichen.
InformationsquelleAutor
Nur setzen Sie es, tun Sie den folgenden Befehl verwenden
git
:Erklären: was
git reset
tut, es ist im Grundereset
zu jeder Begehen Sie möchten, um zurück zu gehen, dann, wenn Sie es kombinieren mit--soft
- Taste, es wird zurück gehen, aber halten Sie die änderungen in Ihre Datei(en), so dass Sie wieder auf die Bühne, die die Datei, die gerade Hinzugefügt wurde,HEAD
ist der Leiter der Filiale, und wenn Sie verbinden sich mit~1
(in diesem Fall verwenden Sie auchHEAD^
), es gehen wieder nur einen commit dem, was Sie wollen...Erstelle ich die Schritte im Bild und mehr details für Sie, inklusive aller Schritte, die möglicherweise passiert in realen Situationen und Begehen Sie den code:
InformationsquelleAutor
Rückgängigmachen des letzten Git commit?
Wiederherstellen alles wieder so, wie es war vor dem letzten commit, wir müssen zurücksetzen, um den commit vor dem KOPF.
Wenn Sie nicht wollen, um Ihre änderungen, die Sie vorgenommen haben:
Wenn Sie möchten, um Ihre änderungen:
Nun überprüfen Sie Ihre git log. Es wird sich zeigen, dass unsere Letzte commit entfernt wurde.
InformationsquelleAutor
Verwenden reflog zu finden, einen korrekten Zustand
REFLOG VOR RESET
Wählen Sie die richtige reflog (f3cb6e2 in meinem Fall), und geben Sie
Nach, dass die repo-KOPF " wird wieder auf, dass HEADid
LOG NACH RESET
Schließlich das reflog sieht aus wie das Bild unten
REFLOG LETZTEN
InformationsquelleAutor
"Reset the working tree auf den letzten commit"
"Sauber unbekannte Dateien aus dem working tree"
sehen - Git Quick Reference
HINWEIS: Dieser Befehl löscht Ihre vorherigen commit, also mit Vorsicht verwenden!
git reset --hard
ist sicherer –InformationsquelleAutor
Ersten Lauf:
Es wird Ihnen zeigen, alle möglichen Aktionen, die Sie durchgeführt haben, die auf Ihrem repository, zum Beispiel, commit, merge, ziehen, etc.
Dann tun:
InformationsquelleAutor
Letzten commit rückgängig machen:
git reset --soft HEAD^
odergit reset --soft HEAD~
Dies wird rückgängig gemacht, die letzten commit.
Hier
--soft
bedeutet, dass zurücksetzen in die Inszenierung.HEAD~
oderHEAD^
bedeutet, sich zu bewegen, zu Begehen, vor den KOPF.Ersetzen letzten commit zu neuen commit:
Wird, ersetzt Sie die letzten commit mit der neuen commit.
InformationsquelleAutor
Einen anderen Weg:
Kasse der Filiale, die Sie wiederherstellen möchten, dann setzen Sie Ihrer lokalen Arbeitskopie zurück auf den commit, der Sie sein wollen, das späteste auf dem remote-server (alles danach wird go bye-bye). Um dies zu tun, in SourceTree ich mit der rechten Maustaste angeklickt und ausgewählt "Zurückgesetzt BRANCHNAME, um diese Begehen".
Dann navigieren Sie zu Ihrem repository das lokale Verzeichnis und führen folgenden Befehl aus:
Diese löscht alle commits, die nach dem aktuellen in Ihrem lokalen repository, sondern nur für die, die einen Zweig.
InformationsquelleAutor
Typ
git log
und finden, dass der Letzte commit-hash-code und geben Sie dann ein:InformationsquelleAutor
In meinem Fall, dass ich versehentlich begangen einige Dateien, die ich nicht will. Also habe ich Folgendes gemacht und es hat geklappt:
Überprüfen Sie die Ergebnisse mit gitk oder git log --stat
InformationsquelleAutor
Einfach, führen Sie diese in der command line:
InformationsquelleAutor
Gibt es viele Möglichkeiten, es zu tun:
Git Befehl rückgängig machen den letzten commit/vorherigen commits:
Warnung: Nicht verwenden --hart sein, wenn Sie nicht wissen, was Sie tun.
--schwer zu gefährlich, und es könnte löschen Sie Ihre Dateien.
Basic-Befehl, um wieder das commit in Git:
oder
COMMIT-ID: ID für die commit -
n: ist die Nummer des letzten commits, die Sie wiederherstellen möchten
Können Sie die commit-id, wie unten gezeigt:
wo d81d3f1 und be20eb8 sind commit-id.
Nun wollen wir sehen einige Fälle:
Nehme an, du willst wieder das Letzte commit 'd81d3f1'. Hier sind zwei Optionen:
oder
Angenommen, Sie möchten, um wieder das commit 'be20eb8':
Weitere detaillierte Informationen finden Sie und versuchen Sie einige andere Befehle, die auch für das zurücksetzen der Kopf zum angegebenen Zustand:
git reset --hard HEAD~1
ist zu gefährlich! Dies wird sich nicht nur auf "Abbrechen" letzten "commit", aber wieder repo komplett wieder auf den vorherigen commit. So VERLIEREN Sie alle änderungen, begangen im letzten commit!Sie Recht, rückgängig machen können Sie
git push -f <remote> HEAD@{1}:<branch>
Leider, ich auch-hart und meine Dateien sind gelöscht! Ich habe nicht überprüfen Sie die Kommentar-zuerst, weil es reduziert ist. Nicht verwenden --hart sein, wenn Sie nicht wissen, was Sie tun!
InformationsquelleAutor
Zurücksetzen auf die Vorherige revision, dauerhaft löschen alle nicht übernommenen änderungen:
Wenn Sie passieren, dies zu tun, durch Zufall, nicht alles ist verloren, wenn. Siehe stackoverflow.com/questions/10099258/..., stackoverflow.com/questions/15479501/... und stackoverflow.com/questions/7374069/undo-git-reset-hard/7376959.
Verwenden
--soft
um Ihre änderungen alsuncommitted changes
,--hard
auf nuke der commit vollständig aus und wieder ein. Denken Sie daran, zu tun, solche Operationen nur auf änderungen, die nicht geschoben noch.Du hast Recht, vielleicht sollte ich das geklärt haben. Nur Dateien/änderungen wurden entweder Hinzugefügt-index (/inszeniert) oder begangen wurden, können möglicherweise wiederhergestellt werden. Uncommitted unstaged changes , wie Sie sagte, völlig weggeworfen von
git reset --hard
.Nebenbei: Jedesmal, wenn eine Datei inszeniert
git
speichert seinen Inhalt in seine Objekt-Datenbank. Die gespeicherten Inhalte sind nur entfernt, wenn die garbage collection ausgeführt wird. Es ist daher möglich, die Wiederherstellung der letzten szenischen version der Datei, die derzeit nicht inszeniert, wenngit reset --hard
ausgeführt wurde (siehe die Beiträge weiter oben verlinkt für mehr Informationen).InformationsquelleAutor
Verwenden SourceTree (grafisches tool für Git), um zu sehen, Ihr begeht und Baum. Sie können manuell zurücksetzen, es direkt mit der rechten Maustaste.
InformationsquelleAutor
Für einen lokalen commit
oder wenn Sie nicht mehr genau in welcher commit es ist, könnten Sie
Für ein geschoben commit
Die richtige Art, entfernen von Dateien aus der repository-Historie ist mit
git filter-branch
. Das ist,Aber ich recomnend verwenden Sie diesen Befehl mit Vorsicht. Lesen Sie mehr unter git-filter-branch(1) Manual Page.
InformationsquelleAutor