wake-up-neo.com

Wie kann ich ein "Git Commit" lokal und auf einer Fernbedienung nach "Git Push" rückgängig machen?

Ich habe git commit Gefolgt von einem git Push Ausgeführt. Wie kann ich diese Änderung in lokalen und fernen Repositorys rückgängig machen?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael [email protected]>
Date:   Tue Jun 11 12:24:23 2011 -0700
219
michael
git reset --hard HEAD~1
git Push -f <remote> <branch>

(Beispiel Push:git Push -f Origin bugfix/bug123)

Dadurch wird die letzte Festschreibung rückgängig gemacht und der aktualisierte Verlauf an die Fernbedienung übertragen. Sie müssen das -f weil Sie den Upstream-Verlauf in der Fernbedienung ersetzen.

369
Alexander Groß

Führen Sie im Allgemeinen ein "inverses" Commit aus, indem Sie Folgendes verwenden:

git revert 364705c

dann senden Sie es wie gewohnt an die Fernbedienung:

git Push

Das Commit wird dadurch nicht gelöscht: Es wird ein zusätzliches Commit erstellt, das alle Aktionen des ersten Commits rückgängig macht. Alles andere, nicht wirklich sicher, besonders wenn die Änderungen bereits verbreitet wurden.

152
Amadan

Zunächst einmal entspannen.

"Nichts ist unter unserer Kontrolle. Unsere Kontrolle ist bloße Illusion.", "Irren ist menschlich"

Ich habe erfahren, dass Sie Ihren Code unbeabsichtigt auf remote-master Verschoben haben. Dies wird in Ordnung sein.

1. Ermitteln Sie zunächst den SHA-1 - Wert des Commits, den Sie zurückgeben möchten, z. Festschreiben an Hauptzweig. führe dies aus:

git log

zu jedem Commit sehen Sie eine Reihe von "f650a9e398ad9ca606b25513bd4af9fe ..." - ähnlichen Zeichenfolgen. Kopieren Sie diese Nummer aus dem Commit, den Sie zurückgeben möchten.

2. Geben Sie nun den folgenden Befehl ein:

git reset --hard your_that_copied_string_but_without_quote_mark

sie sollten die Meldung "HEAD is now at" sehen. Sie sind klar. Was es gerade getan hat, ist, diese Änderung lokal zu reflektieren.

3. Geben Sie nun den folgenden Befehl ein:

git Push -f

du solltest gerne sehen

"Warnung: Push.default ist nicht gesetzt; sein impliziter Wert hat sich geändert in ..... ... Summe 0 (Delta 0), wiederverwendete 0 (Delta 0) ... ... Ihr_Zweigname -> Master (erzwungenes Update) . "

Jetzt ist alles klar. Überprüfen Sie den Master erneut mit "git log", Ihr fixed_destination_commit sollte ganz oben auf der Liste stehen.

Gern geschehen (vorab;))

AKTUALISIEREN:

Nun sind die Änderungen, die Sie vorgenommen hatten, bevor all dies begann, jetzt weg. Wenn Sie diese harten Arbeiten wieder zurückbringen möchten, ist es möglich. Dank der Befehle git reflog und git cherry-pick .

Dafür würde ich vorschlagen, bitte folgen Sie diesem Blog oder diesem Post .

35
kmonsoor

git reset HEAD~1 wenn Sie nicht möchten, dass Ihre Änderungen gelöscht werden (nicht bereitgestellte Änderungen). Ändern, festschreiben und erneut drücken git Push -f [Origin] [branch]

8
softvar

Sie können eine interaktive Rebase durchführen:

git rebase -i <commit>

Dadurch wird Ihr Standardeditor aufgerufen. Löschen Sie einfach die Zeile mit dem Commit, den Sie entfernen möchten, um diesen Commit zu löschen.

Sie benötigen natürlich Zugriff auf das Remote-Repository, um diese Änderung auch dort anzuwenden.

Siehe diese Frage: Git: Entfernen ausgewählter Commits aus dem Repository

3
Jack Edmonds

Alternative:

git Push Origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

Erzwingen Sie, dass der Hauptzweig des Origin-Remoterepositorys dem übergeordneten Zweig des letzten Commits entspricht

2
MicRum

Versuchen Sie es mit

git reset --hard <commit id> 

Bitte beachten Sie: Hier wird die ID des Commits, zu dem Sie wechseln möchten, nicht jedoch die ID, die Sie zurücksetzen möchten. Dies war der einzige Punkt, an dem ich auch feststeckte.

dann drücken

git Push -f <remote> <branch>
2
Mohit Dhawan