848 Stimmen

Rückgängig machen eines 'git push'

Das habe ich bei meinem vermeintlich stabiles Zweig...

% git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded alpha-0.3.0 to master.
% git status
# On branch alpha-0.3.0
# Your branch is ahead of 'origin/alpha-0.3.0' by 53 commits.
#
nothing to commit (working directory clean)
% git push
Fetching remote heads...
  refs/
  refs/heads/
  refs/tags/
  refs/remotes/
'refs/heads/master': up-to-date
updating 'refs/heads/alpha-0.3.0'
  from cc4b63bebb6e6dd04407f8788938244b78c50285
  to   83c9191dea88d146400853af5eb7555f252001b0
    done
'refs/heads/unstable': up-to-date
Updating remote server info

Das war ein Fehler, wie ich später feststellte. Ich möchte diesen gesamten Prozess rückgängig machen und den Zweig alpha-0.3.0 wieder auf den ursprünglichen Stand zurücksetzen.

Was sollte ich tun?

0 Stimmen

Dieser Stackoverflow-Beitrag vielleicht? stackoverflow.com/questions/134882/eine-git-rebase-zurückziehen

8 Stimmen

Das Rückgängigmachen eines Rebase ist ein lokales Repository-Szenario, das Rückgängigmachen eines Git-Push erfordert ein entferntes Repository und kann je nach Zugriffsrechten etwas komplizierter sein.

0 Stimmen

Steen - du hast Recht - das hätte ich wahrscheinlich tun sollen. Ich dachte mir, dass das gesegnete Repository, aus dem alle ziehen, eher eine Admin-Aufgabe ist und daher hierher gehört, wo allgemeines client-seitiges Git eine Stackoverflow-Frage ist.

1317voto

CB Bailey Punkte 693084

Sie müssen sicherstellen, dass keine anderen Benutzer dieses Repositorys die falschen Änderungen abrufen oder versuchen, auf den Commits aufzubauen, die Sie entfernen wollen, weil Sie dabei sind, die Geschichte zurückzuspulen.

Dann müssen Sie die alte Referenz "erzwingen".

git push -f origin last_known_good_commit:branch_name

oder in Ihrem Fall

git push -f origin cc4b63bebb6:alpha-0.3.0

Sie haben vielleicht receive.denyNonFastForwards auf dem entfernten Repository gesetzt ist. Wenn dies der Fall ist, erhalten Sie eine Fehlermeldung, die die Phrase [remote rejected] .

In diesem Fall müssen Sie den Zweig löschen und neu erstellen.

git push origin :alpha-0.3.0
git push origin cc4b63bebb6:refs/heads/alpha-0.3.0

Wenn das nicht funktioniert - vielleicht weil Sie receive.denyDeletes setzen, müssen Sie direkten Zugriff auf das Repository haben. Im entfernten Repository müssen Sie dann so etwas wie den folgenden Klempnerbefehl ausführen.

git update-ref refs/heads/alpha-0.3.0 cc4b63bebb6 83c9191dea8

222voto

Benny Wong Punkte 6513

Ich glaube, dass Sie dies auch tun können:

git checkout alpha-0.3.0
git reset --hard cc4b63bebb6
git push origin +alpha-0.3.0

Dies ist der letzten Methode sehr ähnlich, außer dass Sie nicht in der entfernten Datei herumwühlen müssen.

136voto

neoneye Punkte 47046

git revert ist weniger gefährlich als einige der hier vorgeschlagenen Ansätze:

prompt> git revert 35f6af6f77f116ef922e3d75bc80a4a466f92650
[master 71738a9] Revert "Issue #482 - Fixed bug."
 4 files changed, 30 insertions(+), 42 deletions(-)
prompt> git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
prompt>

Ersetzen Sie 35f6af6f77f116ef922e3d75bc80a4a466f92650 durch Ihren eigenen Commit.

56voto

curmil Punkte 967

Eine Möglichkeit, die gewünschten Änderungen beizubehalten:

git reset cc4b63b 
git stash
git push -f origin alpha-0.3.0
git stash pop

Dann können Sie die Dateien auswählen, die Sie verschieben möchten

44voto

Rakib Noushad Punkte 121
git reset --hard HEAD^
git push origin -f

Dadurch wird die letzte Übertragung sowohl von Ihrem lokalen Gerät als auch von Github entfernt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X