Softwareentwicklung, egal wie erfahren es ist, es ist unvermeidlich, Fehler zu machen. Der Unterschied zwischen einem guten Programmierer und einem gewöhnlichen Programmierer besteht jedoch darin, dass sie wissen, wie man Fehler revokiert!
Wenn Sie Git als Versionskontrollsystem verwenden, verfügen Sie bereits über eine leistungsstarke Reihe von "Rückgängigentools". Dieser Artikel zeigt Ihnen fünf leistungsstarke Möglichkeiten, um Fehler mit Git rückgängig zu machen!Schlüsselpunkte
git restore
Flag verwenden, um Änderungen auf Patch -Ebene zu verwerfen. -p
Der Befehl git log
verwenden, um die Datei vor dem falschen Commit in eine Version wiederherzustellen. git checkout
Reflog
zeichnet die Bewegung aller Kopfzeiger im lokalen Repository auf, sodass der Benutzer zum vorherigen Status zurückkehren und verlorene Daten wiederherstellen kann. Reflog
git cherry-pick
verwenden, um das unerwünschte Commit aus dem ursprünglichen Zweig zu löschen. git reset
Schauen wir uns ein Beispielszenario an, das einige "lokale" Änderungen enthält (d. H. Änderungen, die noch nicht eingereicht wurden).
Hinweis: Für einen besseren Überblick und eine bessere Visualisierung habe ich den Tower Git -Desktop -Client in einigen Screenshots verwendet. Sie brauchen keinen Turm, um dieses Tutorial zu lernen.
Lassen Sie uns zuerst das Problem in lösen. Die Änderungen, die wir vorgenommen haben, gingen vollständig in die falsche Richtung. Lassen Sie uns alle Änderungen rückgängig machen und den letzten Commit -Status der Datei neu erstellen: general.css
$ git restore css/general.css
verwenden kann, um dasselbe Ergebnis zu erzielen. Da jedoch git checkout
viele verschiedene Verwendungen und Bedeutungen hat, bevorzuge ich den Befehl leicht aktualisiert git checkout
(es konzentriert sich nur auf diese Arten von Aufgaben). git restore
ist etwas schwierig. Einige der Änderungen, die wir in dieser Datei vorgenommen haben, sind tatsächlich gut, und nur ein Teil muss undokumentiert sein. index.html
Gleiches löst der Befehl git restore
das Problem - diesmal müssen Sie das -p
-Flag verwenden, da wir tief in das "Patch" -Legel einsteigen werden:
$ git restore css/general.css
Git führt Sie dann an und fragen Sie Sie - für jede Änderung in in dieser Datei -, wenn Sie sie verwerfen möchten.
Eine bestimmte Datei in ihren vorherigen Status zurücksetzen
spezifische -Patei in der -Spedikatoren -Version wiederherstellen. Zum Beispiel wissen Sie, dass irgendwann in der Vergangenheit gut funktioniert hat, aber nicht jetzt. Zu diesem Zeitpunkt möchten Sie die Zeit zurückgehen, aber nur für diese bestimmte Datei, nicht für das gesamte Projekt! index.html
den Verlauf Ihrer einzelnen Datei anzeigen: git log
$ git restore -p index.html
geänderten Commits, was sehr nützlich ist, um die Version "Bad Apple" zu finden, die das Problem verursacht. index.html
anzeigen möchten, können Sie das Flag verwenden, um die tatsächlichen Änderungen in diesen Commits anzuzeigen: -p
$ git log -- index.html
-Version der Datei vor dem Commit wiederherstellen! Dies ist wichtig: Anstatt die Datei im falschen Commit wieder aufzunehmen, stellen wir den letzten guten Staat wieder her-den vor dem Commit!
$ git log -p -- index.html
zum Hash -Wert des falschen Commits wird Git angewiesen, Folgendes zu tun: Gehen Sie zu einer Version des referenzierten Commit ~1
vor .
in Ihrem lokalen Arbeitskopie geändert wurde: Git hat die letzte gute Version der Datei für uns wiederhergestellt! index.html
Natürlich sind solche Protokolle perfekt für Situationen, in denen die Dinge nicht gut laufen. Lassen Sie uns zuerst eine kleine Katastrophe erstellen - dann können wir sie mit Reflog beheben.
Angenommen, Sie sind sicher, dass Ihre letzten Commits nicht gut sind: Sie möchten sie loswerden, also haben Sie git reset
verwendet, um zur vorherigen Version zurückzukehren. Infolgedessen verschwand das "Fehler" -Kommittel aus Ihrer Feststellungsgeschichte - wie Sie es möchten.
Aber wie das Leben manchmal merkt man, dass es eine schlechte Idee ist: Letztendlich sind diese Einsendungen nicht so schlimm! Aber die schlechte Nachricht ist, dass Sie sie gerade aus der Verlaufsgeschichte Ihres Repositorys gelöscht haben! ?
Dies ist ein klassischer Fall von Gits Reflog -Tool! Mal sehen, wie es Sie rettet:
$ git restore css/general.css
lass es uns nacheinander brechen:
git reflog
reicht aus. erneut verwenden oder einfach einen neuen Zweig erstellen: git reset
$ git restore -p index.html
Misserfolg verloren sind! git reset
$ git log -- index.html
Zweig löschen! feature/analytics
ist unser aktueller Head -Zweig. Um es löschen zu können, müssen wir zuerst zu einem anderen Zweig umstellen: feature/analytics
$ git restore css/general.css
Git sagt uns, dass wir etwas sehr Ernstes tun sollen: Da feature/analytics
einzigartige Commits enthält, die anderswo nicht existieren, wird es einige (wahrscheinlich wertvolle) Daten zerstören. Ok ... da diese Funktion nicht mehr benötigt wird, können wir fortfahren:
$ git restore -p index.html
Sie haben vielleicht erwartet, was als nächstes passieren wird: Unser Kunden-/Teamleiter/Projektmanager sagt uns glücklich, dass die Funktion zurück ist! ? Sie wollen nach allem weitermachen! ?
In ähnlicher Weise stehen wir vor einer schlechten Situation, in der wir möglicherweise wertvolle Daten verloren haben! Mal sehen, ob Reflog uns wieder retten kann:
$ git log -- index.html
Wenn Sie genau hinschauen, sind die guten Nachrichten offensichtlich. Bevor wir (katastrophal) unseren Zweig löschen können, müssen wir git checkout
zu einem anderen Zweig umstellen (da Git Sie nicht erlauben, den aktuellen Zweig zu löschen). Natürlich wird diese Kasse auch in Reflog aufgezeichnet. Um den von uns gelöschten Zweig wiederherzustellen, können wir jetzt einfach den Status von vor als Ausgangspunkt für den neuen Zweig verwenden:
$ git log -p -- index.html
schauen: Unser Zweig ist wieder zum Leben erweckt! ???
Wenn Sie zufällig einen Desktop -GUI -wie -Turm verwenden, ist es normalerweise so einfach, solche Fehler zu rückgängigen wie das Drücken von cmd z .
Schauen wir uns schließlich einen klassischen Fall der Abteilung "Oh, nein!"
Heute haben viele Teams eine Regel formuliert, die die direkte Einreichung bei Langzeitzweigen wie "Main", "Master" oder "entwickeln" verbietet. Normalerweise sollten neue Commits diese Zweige nur durch Zusammenführen/Rebase erreichen. Wir vergessen und reichen jedoch manchmal direkt nach ...
Nehmen wir das folgende Szenario als Beispiel.
Wir hätten über feature/newsletter
einreichen sollen, aber versehentlich den Commit in der master
-Ast ausgelöst. Schauen wir uns Schritt für Schritt die Lösung an.
Zunächst müssen wir sicherstellen
feature/newsletter
$ git checkout <bad-commit-hash>~1 -- index.html
cherry-pick
$ git reflog
feature/newsletter
Bisher lief alles gut. Aber cherry-pick
löscht den Commit aus dem master
-Ast nicht (es sollte nicht da sein). Also müssen wir dort auch unser Chaos aufräumen:
$ git restore css/general.css
, um unerwünschte Commits aus der Geschichte zu löschen. master
git reset
Ende, alles kehrte zu normalem zurück. So können Sie jetzt Ihren fröhlichen Tanz beginnen! ???
Fehler entspannen ist eine Supermacht
Wenn Sie mehr über Git -Rückgänger -Tools erfahren möchten, empfehle ich das "Git First Aid Kit". Dies ist eine (kostenlose) kurze Videosammlung, die Ihnen zeigt, wie Sie Fehler in Git aufräumen und rückgängig machen. Ich wünsche Ihnen eine reibungslose Entwicklung, einen Mut zu versuchen, und natürlich müssen Sie gut reparieren! FAQs über die Verwendung von Git zum Rückgängigmachen von Fehlern (FAQ)
Was ist der Unterschied zwischenund
?
git reset
Bewegen Sie Ihren Kopfzeiger auf ein bestimmtes Commit. Dies bedeutet, dass es tatsächlich alle Commits, die Sie nach dem Rücksetzen auf das Commit haben, "vergessen" haben. Dies ist eine zerstörerische Operation und sollte mit Vorsicht verwendet werden. Auf der anderen Seite schafft git revert
ein neues Verpflichtung, die Änderungen in einem bestimmten Komitee rückgängig zu machen. Dies ist ein sicherer Betrieb, da sie die bestehende Geschichte nicht ändert. Wie kann man die git reset
-Operation rückgängig machen? git revert
git reset
Wenn Sie bereits git revert
verwendet haben, um die Änderungen zu speichern und dies rückgängig zu machen, können Sie den Befehl
git add
verwenden, ohne die Datei anzugeben. Kann ich git add
rückgängig machen? git reset
git reset <file></file>
Ja, Sie können mit dem Befehl git reset
oder
git commit
ein neues Verpflichtung erstellen, um die Änderungen im unerwünschten Commit rückgängig zu machen. Wie können Sie Änderungen in einer bestimmten Datei rückgängig machen? git reset
git revert
Wenn Sie Änderungen an einer bestimmten Datei vorgenommen haben und diese Änderungen rückgängig machen möchten, können Sie den Befehl git commit
verwenden. Beispielsweise verwerfen git reset
Änderungen im lokalen Arbeitsverzeichnis der angegebenen Datei. git revert
git stash
Was ist das? git stash
ist ein Befehl, mit dem Sie Änderungen vorübergehend speichern können, die Sie nicht sofort einreichen möchten. Dies ist nützlich, wenn Sie zu einem anderen Zweig wechseln müssen, aber die aktuelle Änderung nicht begehen möchten. Sie können die temporären Änderungen später mit git stash apply
anwenden.
Sie können den Befehl git log
verwenden, um Ihren Git -Verlauf anzuzeigen. Dies zeigt Ihnen eine Liste aller Commits im Repository sowie deren Commit -Nachrichten.
git push
rückgängig machen? Ja, Sie können git push
rückgängig machen, aber dies ist etwas komplizierter als die Rückgängigmachung lokaler Änderungen. Sie müssen den Befehl -f
mit den Optionen --force
oder git push
verwenden, um das Remote -Repository mit Ihrem lokalen Repository zu überschreiben. Seien Sie vorsichtig mit diesem Befehl, da dies anderen Personen, die sich mit demselben Repository befassen, Probleme verursachen können.
Wenn Sie mehrere Commits rückgängig machen möchten, können Sie den Befehl git reset
und die HEAD~<number></number>
-Syntax verwenden. Zum Beispiel bewegt git reset HEAD~3
Ihren Kopfzeiger vor drei Commits zurück.
Soft Reset verschiebt Ihren Kopfzeiger auf ein bestimmtes Commit, ändert jedoch nicht Ihr Arbeitsverzeichnis und Ihr Staging -Bereich. Dies bedeutet, dass Sie immer noch Änderungen von "vergessenen" Commits als nicht verbindliche Änderungen sehen. Auf der anderen Seite wird ein hartes Reset alle Änderungen im Arbeitsverzeichnis und im Staging -Bereich verwerfen und Ihr Repository zum Zeitpunkt des angegebenen Commits effektiv wieder in den Staat wiederherstellt.
Ja, Commits können nach einem harten Zurücksetzen wieder aufgenommen werden, aber es ist nicht einfach. Git hält Protokolle für alle REF -Updates (z. B. bewegte Kopfzeiger) im Reflog. Sie können den Befehl git reflog
verwenden, um das Commit zu ermitteln, das Sie wiederherstellen möchten, und dann git branch
einen neuen Zweig bei diesem Commit zu erstellen.
Das obige ist der detaillierte Inhalt von5 Möglichkeiten, Fehler mit Git rückgängig zu machen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!