Zurücksetzen der Fernbedienung auf ein bestimmtes Commit
Ich möchte alle Änderungen, die nach dem Commit <commit-hash>
gemacht wurden, verwerfen.
Also habe ich das getan:
git reset --hard <commit-hash>
Jetzt möchte ich das Gleiche mit meinem Remote tun. Wie kann ich das machen? Ich habe einige Commits (und Pushes) nach <commit-hash>
gemacht und ich möchte sie einfach alle verwerfen. Es ist einfach etwas schrecklich schief gelaufen und ich will es nicht noch schlimmer machen als es schon ist ;(
Ich möchte im Grunde mein origin/master
zu <commit-hash>
zurückspulen.
629
3
Unter der Annahme, dass Ihr Zweig sowohl hier als auch in der Ferne
master
heißt, und dass Ihr Zweig in der Ferneorigin
heißt, könnten Sie dies tun:Sie sollten dies jedoch vermeiden, wenn jemand anderes mit Ihrem entfernten Repository arbeitet und Ihre Änderungen übernommen hat. In diesem Fall wäre es besser, revert die Commits, die Sie nicht wollen, und dann wie gewohnt zu pushen.
Aktualisierung: Sie haben unten erklärt, dass andere Leute die Änderungen, die Sie gepusht haben, gezogen haben, also ist es besser, einen neuen Commit zu erstellen, der alle diese Änderungen rückgängig macht. In [Diese Antwort von Jakub Narębski] (https://stackoverflow.com/questions/1463340/revert-multiple-git-commits/1470452#1470452) gibt es eine gute Erklärung der Möglichkeiten, wie man das macht. Welche Methode am besten geeignet ist, hängt davon ab, wie viele Commits Sie rückgängig machen wollen, und welche Methode für Sie am sinnvollsten ist.
Da aus Ihrer Frage klar hervorgeht, dass Sie bereits
git reset --hard
verwendet haben, um Ihrenmaster
Zweig zurückzusetzen, müssen Sie vielleicht damit beginnen,git reset --hard ORIG_HEAD
zu verwenden, um Ihren Zweig dorthin zurückzubringen, wo er vorher war. (Wie immer beigit reset --hard
, stellen Sie sicher, dassgit status
sauber ist, dass Sie sich auf dem richtigen Zweig befinden und dass Siegit reflog
als Werkzeug kennen, um scheinbar verlorene Commits wiederherzustellen.) Sie sollten auch überprüfen, dassORIG_HEAD
auf den richtigen Commit zeigt, mitgit show ORIG_HEAD
.Fehlersuche:
Wenn Sie eine Meldung wie "! [remote rejected] a60f7d85 -> master (pre-receive hook declined)"
dann müssen Sie das Umschreiben des Zweigverlaufs für den betreffenden Zweig erlauben. In BitBucket heißt es zum Beispiel "Rewriting branch history is not allowed". Es gibt eine Checkbox mit dem Namen
Allow rewriting branch history
, die Sie ankreuzen müssen.Verwenden Sie die anderen Antworten, wenn es Ihnen nichts ausmacht, lokale Änderungen zu verlieren. Diese Methode kann immer noch Ihr Remote-System zerstören, wenn Sie den falschen Commit-Hash wählen, zu dem Sie zurückgehen wollen.
Wenn Sie nur wollen, dass die Remote mit einem Commit übereinstimmt, der bereits in Ihrem lokalen Zweig ist:
Führen Sie kein Zurücksetzen durch.
Benutzen Sie
git log
, um den Hash des Commits zu finden, den Sie in der entfernten Version haben wollen. Mitgit log -p
sehen Sie die Änderungen, oder mitgit log --graph --all --oneline --decorate
sehen Sie einen kompakten Baum. (Letzteres als Alias in Ihrer Shell zu haben, ist sehr praktisch).Kopiere den Hash.
Führen Sie einen Befehl aus wie:
z.B..
Ich habe ein ähnliches Problem wie Ihres mit diesen Befehlen gelöst: