So entfernen Sie einen Commit, der mit Git an das Remote-Repository gepusht wurde

Lesezeit: 3 Minuten

Benutzer-Avatar
Schattenfax

Ich habe ein paar Commits in das Remote-Repository verschoben und festgestellt, dass sie Probleme verursachen.

Wie kann ich zur vorherigen Version zurückkehren? Das heißt, die beiden letzten Commits entfernen?

Benutzer-Avatar
David M. Syzdek

Da Sie die Commits bereits in ein Remote-Repository gepusht haben, ist der beste Weg wahrscheinlich, die beiden Commits rückgängig zu machen, damit Sie keine Probleme für alle schaffen, die bereits aus dem Remote-Repository gezogen haben.

Beispiele verwenden den folgenden Commit-Verlauf:

e512d38 Adding taunts to management.
bd89039 Adding kill switch in case I'm fired.
da8af4d Adding performance optimizations to master loop.
db0c012 Fixing bug in the doohickey

Wenn Sie nur die Commits zurücksetzen möchten, ohne den Verlauf zu ändern, können Sie Folgendes tun:

git revert e512d38
git revert bd89039

Wenn Sie nicht möchten, dass andere sehen, dass Sie den Kill-Schalter hinzugefügt und dann entfernt haben, können Sie alternativ das Repository mit dem folgenden Rollback zurücksetzen (dies führt jedoch zu Problemen für andere, die Ihre Änderungen bereits von der Fernbedienung abgerufen haben) :

git reset --hard da8af4d
git push origin -f localBranch:remoteBranch

wo localBranch ist der Name der lokalen Niederlassung und remoteBranch ist der Name der entfernten Verzweigung.

  • “Fügen Sie dem Management Verspottungen hinzu” führt zu dem alten (neuen?) Sprichwort “Don’t drink and push”. 🙂

    – Torek

    16. März 2012 um 3:45 Uhr

  • @torek Was soll ich sagen, ich bin sowohl ein überzeugter Trinker als auch ein Trinker.

    – David M. Syzdek

    16. März 2012 um 4:19 Uhr

  • Folgendes hat bei mir funktioniert git reset –hard da8af4d git push origin -f localBranch:remoteBranch

    – Shyam Sunder

    19. Juni 2018 um 18:23 Uhr


  • Das ist erwähnenswert git reset --hard macht alle lokalen Änderungen im Arbeitsbaum rückgängig, einschließlich derjenigen, die nicht Teil der problematischen Übergabe(n) waren. Im Zweifelsfall ist es auf jeden Fall ratsam, zuerst eine Sicherungskopie dieses funktionierenden Baums zu erstellen (eine schnelle tar wird gut tun).

    – sxc731

    25. November 2018 um 14:37 Uhr

Ich denke, Sie können lokal ein Rollback durchführen und das Ergebnis pushen:

$ git reset HEAD^ --hard
$ git push REMOTE -f

Wobei „REMOTE“ der entfernte Name ist.

  • Du kann Tun Sie das, aber es ist nicht ratsam, da jeder andere, der sich die Commits in der Zwischenzeit geschnappt hat, … nun, um böse Worte zu vermeiden, sagen wir “sie müssen hart arbeiten, um sich von Ihren Aktionen zu erholen”. 🙂 Es ist besser, “git revert” zu verwenden, um einen neuen Commit hinzuzufügen, der einen vorherigen Commit rückgängig macht. (Stellen Sie sich ein „Zurücksetzen“ als „einen Commit hinzufügen, dessen Patch die Aktion ist, einen vorherigen Commit genau rückgängig zu machen“, denn genau das ist es.)

    – Torek

    16. März 2012 um 3:20 Uhr

  • @torek Ich habe zuerst darüber nachgedacht, aber ich denke, Shadowfax könnte andere Zwecke haben, z.

    – Petrus

    16. März 2012 um 3:30 Uhr


  • Ich denke, Sie werden überrascht sein, wie viele Leute es nicht verstehen git revert. Andererseits könnte es ein ganz anderes Motiv geben (wie in der Antwort von David M. Syzdek). In einigen Fällen gibt es keine guten Lösungen, sondern nur die am wenigsten schlechte (die je nach Situation unterschiedlich ist).

    – Torek

    16. März 2012 um 3:44 Uhr

Geben Sie zunächst diesen Befehl ein.

git log -n 4

Dieser Befehl zeigt Ihre letzten 4 Commits mit ihrem SHA an. Geben Sie danach den folgenden Befehl ein.

git rebase -i SHA_ID

Geben Sie anstelle von SHA_ID den SHA des Commit vor dem Commit ein, das Sie löschen möchten.

Danach wird eine Datei geöffnet, oben in dieser Datei sehen Sie den SHA und die Nachricht des Commits, den Sie löschen möchten. Löschen Sie diese Zeile und speichern und verlassen Sie die Datei.

Wenn Sie dies getan haben, müssen Sie einen Stoß machen. Geben Sie also den folgenden Befehl ein.

git push -f origin master

Nachdem Sie damit fertig sind, können Sie sehen, dass Ihr Commit gelöscht wurde.

Benutzer-Avatar
A. El Idrissi

git push origin -f last_good_commit:yourEditingBranch

Der last_good_commit wird der neue Leiter der Branche. Dann führen Sie lokal einen Hard-Reset durch:

git reset origin/yourEditingBranch

1054040cookie-checkSo entfernen Sie einen Commit, der mit Git an das Remote-Repository gepusht wurde

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy