Machen Sie einen bestimmten Commit in Git rückgängig, der an Remote-Repositorys gepusht wurde

Lesezeit: 4 Minuten

Machen Sie einen bestimmten Commit in Git ruckgangig der an
lprsd

Was ist der einfachste Weg, um einen bestimmten Commit rückgängig zu machen, nämlich:

  • nicht im Kopf oder HEAD
  • Wurde auf die Fernbedienung geschoben.

Denn wenn es nicht der letzte Commit ist,

git reset HEAD

funktioniert nicht. Und weil es auf eine Fernbedienung geschoben wurde,

git rebase -i

und

git rebase --onto

wird einige Probleme in den Fernbedienungen verursachen.

Mehr noch, ich möchte den Verlauf nicht wirklich ändern. Wenn es schlechten Code gab, war er in der Historie vorhanden und kann gesehen werden. Ich möchte es nur in der Arbeitskopie haben und habe nichts gegen einen Reverse-Merge-Commit.

Mit anderen Worten, was ist die Git Äquivalent der folgenden SVN-Befehle:

svn merge -r 303:295 http://svn.example.com/repos/calc/trunk

Dadurch werden alle Änderungen von 295 bis 302 entfernt, indem alle Änderungen in diesen Revisionen als neuer Commit umgekehrt zusammengeführt werden.

svn merge -c -302 ^/trunk

was den 302-Commit rückgängig macht, natürlich indem ein weiterer Commit hinzugefügt wird, der die Änderungen von diesem jeweiligen Commit rückgängig macht.

Ich dachte, es sollte eine ziemlich einfache Operation in Git und ein ziemlich häufiger Anwendungsfall sein. Was ist der Sinn von atomaren Commits?

Wir haben eine Inszenierung verstauen und alles, um sicherzustellen, dass die Commits perfekt atomar sind, sollten Sie nicht in der Lage sein, einen oder mehrere dieser atomaren Commits einfach rückgängig zu machen?

1646631490 781 Machen Sie einen bestimmten Commit in Git ruckgangig der an
Andreas Aylett

Identifizieren Sie den Hash des Commits mit git logdann benutze git revert <commit> um einen neuen Commit zu erstellen, der diese Änderungen entfernt. In gewisser Weise git revert ist das Gegenteil von git cherry-pick — Letzterer wendet den Patch auf einen Zweig an, der ihn nicht hat, ersterer entfernt ihn von einem Zweig, der ihn hat.

  • Und verwenden Sie den Schalter -n, wenn Sie den Code zurückhaben möchten, aber nicht automatisch erneut festgeschrieben haben

    – jaygooby

    22. November 2011 um 12:09 Uhr

  • Was bewirkt die Option „m“? Ich habe git revert 8213f7d versucht, aber stattdessen Folgendes erhalten: Fehler: Commit 8213f7dad1ed546b434a0d8a64cb783b530a5a30 ist eine Zusammenführung, aber es wurde keine Option -m angegeben. fatal: Zurücksetzen fehlgeschlagen

    – Malcolm

    2. Oktober 2013 um 0:21 Uhr


  • Um eine Zusammenführung rückgängig zu machen: git revert -m 1

    – Brunosrk

    13. Oktober 2014 um 15:02 Uhr

  • Eine Warnung an alle, die eine Zusammenführung rückgängig machen möchten: git revert macht alle Datenänderungen rückgängig (dh die Dateiänderungen werden rückgängig gemacht), aber die Zusammenführung bleibt weiterhin im Verlauf. Aus diesem Grund werden, wenn Sie versuchen, denselben Zweig später erneut zusammenzuführen, keine Commits aus dem zusammenführenden Zweig vor der rückgängig gemachten Zusammenführung enthalten sein. Dies ist höchstwahrscheinlich nicht das, was Sie wollen. Um den Zweig wieder vollständig zusammenzuführen, müssen Sie zuerst das Commit rückgängig machen, bei dem Sie die ursprüngliche Zusammenführung rückgängig gemacht haben. Erfahren Sie hier mehr: kernel.mirrors.pair.com/pub/software/scm/git/docs/howto/…

    – Etreworgie

    6. Mai 2015 um 18:44 Uhr


  • Der Link im Kommentar von @etreworgy ist 404. Ich vermute, dies ist eine aktuelle Version des Links: kernel.org/pub/software/scm/git/docs/howto/…

    – Tim Smith

    23. Mai 2017 um 23:31 Uhr

Machen Sie einen bestimmten Commit in Git ruckgangig der an
Mulan

Ich mag das Auto-Commit nicht git revert tut, also könnte dies für einige hilfreich sein.

Wenn Sie nur die geänderten Dateien wollen, nicht den Auto-Commitkönnen Sie verwenden --no-commit

% git revert --no-commit <commit hash>

das ist das gleiche wie die -n

% git revert -n <commit hash>

  • Könntest du auch machen git reset HEAD~1 --soft wenn Sie bereits ohne zurückgekehrt sind -n

    – Daniel

    7. Juli 2016 um 15:15 Uhr

  • Aber git reset HEAD~n löst nicht das Rückgängigmachen eines Commit, das nicht kontinuierlich vom Kopf aus erreichbar ist. Die Abfrage besteht darin, einen bestimmten Commit rückgängig zu machen.

    – Sangeethkumarp

    15. November 2017 um 16:15 Uhr


  • Ich habe diese Lösung verwendet, bin aber mitten in der Wiederherstellung auf einen Konflikt gestoßen. Nachdem ich den Konflikt gelöst hatte, tat ich es git revert --continue wie es mir befohlen wurde. Es hat funktioniert, aber leider die Ergebnisse begangen. Vielleicht musste ich das tun git revert --no-commit --continue.

    – Schiffsfloß

    9. Januar 2019 um 14:05 Uhr

  • @sangeethkumarp Der Kommentar von Daniel ist ein zusätzlicher Schritt, den Sie nach dem machen können git revertfalls du das vergessen hast -n; da an diesem Punkt der letzte Commit die Umkehrung ist, wird der Soft-Reset also diesen Commit rückgängig machen, aber nicht die zugehörigen Codeänderungen der Umkehrung

    – Oliver

    4. März 2020 um 15:34 Uhr

  • @Daniel hat Lösungen per Kommentar zur Verfügung gestellt, die für mich funktionieren. Vielen Dank, viel ”git reset HEAD ~ 1 –soft”

    – Md. Abu Sayed

    11. März 2020 um 6:58 Uhr


Da es bereits gepusht wurde, sollten Sie den Verlauf nicht direkt manipulieren. git revert wird bestimmte Änderungen von einem Commit mit einem neuen Commit rückgängig machen, um den Commit-Verlauf nicht zu manipulieren.

Wenn der Commit, den Sie zurücksetzen möchten, ein zusammengeführter Commit ist (der bereits zusammengeführt wurde), sollten Sie beides tun -m 1 oder -m 2 Option wie unten gezeigt. Dies teilt Git mit, welches übergeordnete Commit des zusammengeführten Commits verwendet werden soll. Weitere Einzelheiten finden Sie HIER.

  • git revert <commit> -m 1
  • git revert <commit> -m 2
963230cookie-checkMachen Sie einen bestimmten Commit in Git rückgängig, der an Remote-Repositorys gepusht wurde

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

Privacy policy