Ich habe ein Projekt in einem Remote-Repository, das mit einem lokalen Repository (Entwicklung) und dem Server-Repository (Produkt) synchronisiert ist. Ich habe einige festgeschriebene Änderungen vorgenommen, die bereits auf Remote übertragen und vom Server abgerufen wurden. Jetzt möchte ich diese Änderungen rückgängig machen. Ich könnte also nur git checkout
vor den Änderungen festschreiben und die neuen Änderungen festschreiben, aber ich vermute, dass es Probleme geben wird, sie erneut auf Remote zu übertragen. Irgendwelche Vorschläge, wie ich vorgehen soll?
609
Antworten:
Sie können einzelne Commits zurücksetzen mit:
Dadurch wird ein neues Commit erstellt, das die Änderungen des von Ihnen angegebenen Commits zurücksetzt. Beachten Sie, dass nur dieses bestimmte Commit zurückgesetzt wird und danach kein Commit mehr. Wenn Sie eine Reihe von Commits zurücksetzen möchten, können Sie dies folgendermaßen tun:
Es setzt die Commits zwischen und einschließlich der angegebenen Commits zurück.
Weitere Informationen zum Befehl finden Sie in der Manpage git-revert
git revert
. In dieser Antwort finden Sie auch weitere Informationen zum Zurücksetzen von Commits.quelle
git log
<oldest_commit_hash>
dasEine Lösung, die keine Spuren des "Rückgängigmachens" enthält.
HINWEIS: Tun Sie dies nicht, wenn bereits jemand Ihr Wechselgeld gezogen hat (ich würde dies nur für mein persönliches Repo verwenden).
tun:
Dadurch werden alle Updates lokal erneut ausgecheckt (so dass der Git-Status alle aktualisierten Dateien auflistet).
dann "erledigen Sie Ihre Arbeit" und übernehmen Ihre Änderungen erneut (Hinweis: Dieser Schritt ist optional)
In diesem Moment unterscheidet sich Ihr lokaler Baum von der Fernbedienung
wird Remote drücken und zwingen, diesen Push zu berücksichtigen und den vorherigen zu entfernen (die Angabe des Remote-Namens und des Filialnamens ist nicht obligatorisch, wird jedoch empfohlen, um zu vermeiden, dass alle Zweige mit dem Update-Flag aktualisiert werden).
!! Achtung, einige Tags zeigen möglicherweise immer noch auf entferntes Commit !! Wie lösche ich ein Remote-Tag?
quelle
git push -f
letzte richtige Commit durchgeführt und den Remote-Verlauf bereinigt! Vielen Dank!Was ich in diesen Fällen mache, ist:
Bewegen Sie den Cursor auf dem Server zurück zum letzten bekannten guten Commit:
Machen Sie vor Ort dasselbe:
Sehen Sie sich ein vollständiges Beispiel für einen Zweig an
my_new_branch
, den ich zu diesem Zweck erstellt habe:Dies ist die jüngste Geschichte, nachdem einige Dinge hinzugefügt wurden zu
myfile.py
:Ich möchte das letzte Commit loswerden, das bereits gepusht wurde, also renne ich:
Nett! Jetzt sehe ich die Datei, die in diesem Commit (
myfile.py
) geändert wurde, in "Nicht für Commit bereitgestellt" angezeigt:Da ich diese Änderungen nicht möchte, bewege ich den Cursor auch lokal zurück:
Jetzt befindet sich HEAD im vorherigen Commit, sowohl lokal als auch remote:
quelle
Sie können das Git-Commit sowohl lokal als auch remote umkehren (oder auch als DELETE bezeichnen ), wenn Sie die folgenden Schritte über die Git-Befehlszeile ausführen.
Führen Sie den folgenden Befehl aus, um die Festschreibungs-ID anzuzeigen, die Sie zurücksetzen möchten
Sie erhalten wie folgt einen Screenshot
Wenn Sie auch Remote (über das Webinterface) aktivieren, können Sie feststellen, dass dies wie unten gezeigt ist
Wie pro Screenshot zur Zeit sind Sie auf id verpflichten e110322 jedoch zu dem Sie wieder zurück wollen 030bbf6 BEIDE lokal als auch remote .
Führen Sie die folgenden Schritte aus, um Commits lokal + remote zu löschen / rückgängig zu machen
Zuerst lokal zurücksetzen, um die ID 030bbf6 festzuschreiben
gefolgt von
Diese beiden Befehle bereinigen das Zurücksetzen, um Stufe 030bbf6 festzuschreiben, wie unten im Schnappschuss gezeigt
Wenn Sie jetzt den Git-Status ausführen, werden Sie feststellen, dass Sie ZWEI Commits HINTER dem Remote-Zweig sind, wie unten gezeigt
Führen Sie die folgenden Schritte aus, um Ihre Indizes zu aktualisieren (falls Aktualisierungen vorhanden sind). Es wird empfohlen, dass Sie alle Entwickler bitten, keine Pull-Anforderungen für den Haupt-Remote-Zweig zu akzeptieren.
Sobald Sie damit fertig sind , dann sind Sie verpflichtet , schieben diese verpflichten , gewaltsam durch die Verwendung + -vor Zweig Symbol wie unten dargestellt. Ich habe hier verwendeten Master - Zweig, können Sie es mit jedem ersetzen
Code
Wenn Sie nun die Weboberfläche von remote sehen, sollte das Festschreiben ebenfalls zurückgesetzt werden.
quelle
Dadurch werden Ihre Push-Commits entfernt
quelle
In der obigen Codezeile. "Letztes Argument repräsentiert"
1 - kehrt ein Commit zurück.
2 - Setzt die letzten beiden Commits zurück.
n - setzt die letzten n Commits zurück.
Sie müssen nach diesem Befehl drücken, um die Wirkung auf die Fernbedienung zu erzielen. Sie haben andere Möglichkeiten, z. B. den Bereich der zurückzusetzenden Commits anzugeben. Dies ist eine der Optionen.
Später verwenden
git commit -am "COMMIT_MESSAGE"
danngit push
odergit push -f
quelle
git revert ref1..ref2
2020 Einfacher Weg:
(Der Hash des letzten Commits, den Sie behalten möchten).
Sie behalten die jetzt nicht festgeschriebenen Änderungen lokal bei.
Wenn Sie erneut pushen möchten, müssen Sie Folgendes tun:
quelle
Hier ist mein Weg:
Angenommen, der Filialname lautet
develop
.quelle
Sie können so etwas tun
quelle