Folgendes habe ich an meinem angeblich stabilen Zweig getan ...
% 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 alles ein Fehler, wie ich später erkannte. Ich möchte diesen gesamten Prozess rückgängig machen und den Alpha-0.3.0-Zweig auf den ursprünglichen Wert zurücksetzen.
Was sollte ich tun?
Antworten:
Sie müssen sicherstellen, dass keine anderen Benutzer dieses Repositorys die falschen Änderungen abrufen oder versuchen, auf den Commits aufzubauen, die entfernt werden sollen, da Sie den Verlauf zurückspulen möchten.
Dann müssen Sie die alte Referenz 'erzwingen'.
oder in deinem Fall
Möglicherweise haben Sie
receive.denyNonFastForwards
das Remote-Repository festgelegt. Wenn dies der Fall ist, erhalten Sie eine Fehlermeldung, die die Phrase enthält[remote rejected]
.In diesem Szenario müssen Sie den Zweig löschen und neu erstellen.
Wenn dies nicht funktioniert - möglicherweise weil Sie
receive.denyDeletes
festgelegt haben, müssen Sie direkten Zugriff auf das Repository haben. Im Remote-Repository müssen Sie dann etwa den folgenden Installationsbefehl ausführen.quelle
git push -f origin last_known_good_commit:branch_name
Ich glaube, dass Sie dies auch tun können:
Dies ist der letzten Methode sehr ähnlich, außer dass Sie nicht im Remote-Repo herumspielen müssen.
quelle
--hard
Parameter " " steht) die ID des Commits sein sollte, auf das Sie Ihren Zweig zurücksetzen möchten.git reset --hard [commit_id]
damit wir uns nicht mit dem Raum-Zeit-Kontinuum anlegen.+
erzwingt den Push ähnlich wie-f
(jedoch etwas anders: stackoverflow.com/a/25937833/1757149 ). Wenn Sie es ohne versuchen, schlägtgit push origin alpha-0.3.0
der Push fehl :Updates were rejected because the tip of your current branch is behind
.git revert
ist weniger gefährlich als einige der hier vorgeschlagenen Ansätze:Ersetzen Sie 35f6af6f77f116ef922e3d75bc80a4a466f92650 durch Ihr eigenes Commit.
quelle
Die akzeptierte Lösung (von @charles bailey) ist sehr gefährlich, wenn Sie in einem gemeinsamen Repo arbeiten.
Als bewährte Methode sollten alle Commits, die an ein freigegebenes Remote-Repo gesendet werden, als "unveränderlich" betrachtet werden. Verwenden Sie stattdessen 'git revert': http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#fixing-mistakes
https://git-scm.com/book/be/v2/Git-Basics-Undoing-Things
quelle
Eine Möglichkeit, dies zu tun, ohne die gewünschten Änderungen zu verlieren:
Dann können Sie die Dateien auswählen, die Sie pushen möchten
quelle
Ein anderer Weg, dies zu tun:
git push origin --delete <branch_name>
)quelle
Dadurch wird Ihr Repo auf die angegebene Commit-Nummer zurückgesetzt
quelle
Rückgängigmachen mehrerer Commits Git-Reset --hard 0ad5a7a6 (Geben Sie einfach den Commit-SHA1-Hash an)
Machen Sie das letzte Commit rückgängig
git reset --hard HEAD ~ 1 (Änderungen am letzten Commit werden entfernt) git reset --soft HEAD ~ 1 (Änderungen am letzten Commit sind als nicht festgeschriebene lokale Änderungen verfügbar)
quelle
Szenario 1 : Wenn Sie das letzte Commit rückgängig machen möchten, z. B. 8123b7e04b3, finden Sie unten den Befehl (dies hat bei mir funktioniert):
Die Ausgabe sieht wie folgt aus:
Zusätzliche Informationen: Szenario 2 : In einigen Situationen möchten Sie möglicherweise das zurücksetzen, was Sie gerade rückgängig gemacht haben (im Grunde genommen das Rückgängigmachen rückgängig machen), und dann den folgenden Befehl verwenden:
Ausgabe:
Weitere Infos hier: https://github.com/blog/2019-how-to-undo-almost-anything-with-git
quelle
Die vorhandenen Antworten sind gut und korrekt. Was ist jedoch, wenn Sie das
push
aber rückgängig machen müssen :Verwenden Sie diesen Befehl, um die Änderung auf ref zurückzusetzen:
quelle
Wenn Sie das letzte Commit ignorieren möchten, das Sie gerade in den Remote-Zweig verschoben haben: Dadurch wird das Commit nicht entfernt, sondern nur ignoriert, indem der Git-Zeiger auf das Commit verschoben wird, auf das HEAD ^ oder HEAD ^ 1 verweisen
Aber wenn Sie dieses Commit bereits gepusht haben und andere den Zweig gezogen haben. In diesem Fall ist es unerwünscht, den Verlauf Ihrer Niederlassung neu zu schreiben. Stattdessen sollten Sie dieses Commit zurücksetzen:
quelle