Rollback einer Git-Zusammenführung

Lesezeit: 5 Minuten

Rollback einer Git Zusammenfuhrung
cgmkeever

develop branch
--> dashboard (working branch)

ich benutze git merge --no-ff develop um alle Upstream-Änderungen in das Dashboard zusammenzuführen

Git-Protokoll:

commit 88113a64a21bf8a51409ee2a1321442fd08db705
Merge: 981bc20 888a557
Author: XXXX <>
Date:   Mon Jul 30 08:16:46 2012 -0500

    Merge branch 'develop' into dashboard

commit 888a5572428a372f15a52106b8d74ff910493f01
Author: root <[email protected]>
Date:   Sun Jul 29 10:49:21 2012 -0500

    fixed end date edit display to have leading 0

commit 167ad941726c876349bfa445873bdcd475eb8cd8
Author: XXXX <>
Date:   Sun Jul 29 09:13:24 2012 -0500

Die Zusammenführung enthielt mehr als 50 Commits, und ich frage mich, wie ich die Zusammenführung einfach rückgängig machen kann, damit das Dashboard in den Zustand vor der Zusammenführung zurückkehrt

Der zweite Teil davon ist, wenn ich nicht mit fusioniere --no-ffich bekomme das Commit nicht ‘Führen Sie den Zweig „Entwicklung“ in das Dashboard ein‘ .. Wie würde ich diese Zusammenführung rückgängig machen?

  • Mögliches Duplikat von Undo a Git merge?.

    Benutzer456814

    7. Juli 2014 um 4:45 Uhr

Rollback einer Git Zusammenfuhrung
Christoph

Das Zurücksetzen eines Merge-Commits wurde in anderen Fragen ausführlich behandelt. Wenn Sie eine Fast-Forward-Zusammenführung durchführen, können Sie die zweite, die Sie beschreiben, verwenden git reset um zum vorherigen Zustand zurückzukehren:

git reset --hard <commit_before_merge>

Sie finden die <commit_before_merge> mit git reflog, git logoder, wenn dir schlecht wird (und du sonst nichts getan hast): git reset --hard HEAD@{1}

  • danke für die schnelle Antwort. Wenn ich mir das Git-Protokoll ansehe, liegt der Commit vor dem Merge um mehr als 50 Commits zurück, da der Git-Merge-Development tatsächlich alle anderen Commits einfügt. Ich schätze, was ich nicht bekomme, ist, wenn ich nicht weiß, was/wo diese Zusammenführung war – wie finde ich sie? Sie erwähnen das Finden von commit_before_merge .. Ich glaube, ich verstehe diesen Teil nicht

    – cgmkeever

    30. Juli 2012 um 13:42 Uhr

  • sieht aus wie mit git reflog sieht so aus, als ob es die letzten Köpfe gut zusammenfasst und mir erlaubt zu wissen, wo ich zurücksetzen muss. git log scheint zu viel Granularität zu haben, um den Ort zum Zurücksetzen zu bestimmen. Danke

    – cgmkeever

    30. Juli 2012 um 13:53 Uhr

  • Ja, reflogist ein Lebensretter. HEAD@{1} beschreibt nur den zweitneuesten Zustand von HEAD, oder genauer gesagt: „Eine Referenz, gefolgt vom Suffix @ mit einer ordinalen Spezifikation, die in einem geschweiften Paar eingeschlossen ist (z. B. {1}, {15}), gibt den n-ten vorherigen Wert davon an Referenz.”

    – Christoph

    30. Juli 2012 um 14:22 Uhr

  • Was ist mit dem Zurücksetzen auf Remote? Ich sehe nicht, wie es funktionieren wird.

    – Anton Savelyev

    12. April 2019 um 16:26 Uhr

  • Das ist hoffnungslos. Es zerstört alle Commits nach dem Zusammenführen.

    – aaa90210

    22. Juli 2019 um 22:03 Uhr

1646171288 542 Rollback einer Git Zusammenfuhrung
stürrockad

Von hier:

http://www.christianengvall.se/undo-pushed-merge-git/

git revert -m 1 <merge commit hash>

Git revert fügt einen neuen Commit hinzu, der den angegebenen Commit zurücksetzt.

Verwenden -m 1 teilt Git mit, dass dies eine Zusammenführung ist und wir zum übergeordneten Commit auf dem Master-Zweig zurückkehren möchten. Du würdest verwenden -m 2 um den Entwicklungszweig anzugeben.

  • Beachten Sie, dass Sie den Zweig danach nicht erneut zusammenführen können, wie es in der Dokumentation heißt: „Durch das Zurücksetzen eines Merge-Commits wird erklärt, dass Sie niemals möchten, dass die Baumänderungen durch die Zusammenführung eingebracht werden. Daher werden spätere Zusammenführungen nur eingeführte Baumänderungen einbringen durch Commits, die keine Vorfahren der zuvor rückgängig gemachten Zusammenführung sind. Dies kann oder kann nicht das sein, was Sie wollen.”

    – Dalibor Karlović

    12. November 2015 um 9:44 Uhr

  • @DaliborKarlović Diese Aussage ist ein bisschen hart. Sie können diese Änderungen später definitiv wiederherstellen, der Trick besteht darin, den Revert-Commit rückgängig zu machen. Mehr Info Hier im Abschnitt “Wiederherstellen der Wiederherstellung”

    – Hilikos

    1. November 2016 um 18:15 Uhr

  • Leider ist die here Link im @Hilikus-Kommentar ist nicht mehr gültig. Die Website behauptet, der Inhalt sei in ein Buch verschoben worden ( git-scm.com/book/en/v2 ), aber wenn ja, ist es nicht trivial, dort zu lokalisieren.

    – Jesse Chisholm

    26. Juli 2019 um 15:23 Uhr

  • @DaliborKarlović ist dies der Fall bei der obigen Antwort von @Christopher?

    – Jakob B

    29. Oktober 2019 um 12:25 Uhr

  • Der Inhalt zum Rückgängigmachen von Zusammenführungen wurde verschoben Hier

    – SEK

    5. November 2019 um 8:14 Uhr

Setzen Sie einfach den Merge-Commit mit zurück git reset --hard HEAD^.

Wenn Sie –no-ff verwenden, erstellt git immer eine Zusammenführung, auch wenn Sie zwischendurch nichts festgeschrieben haben. Ohne –no-ff führt git nur einen Schnellvorlauf durch, was bedeutet, dass der HEAD deiner Zweige auf den HEAD des zusammengeführten Zweigs gesetzt wird. Um dies zu beheben, suchen Sie die Commit-ID, zu der Sie zurückkehren möchten, und git reset --hard $COMMITID.

  • Gute Lösung, wenn Sie den Commit vor dem Zusammenführen nicht kennen.

    – Eduard A

    26. Januar 2017 um 22:07 Uhr

  • Hat für mich funktioniert, da ich die Commit-ID nicht kenne. +1

    – Anant Kumar Singh

    19. Februar 2020 um 9:59 Uhr


  • wenn die unerwünschte Zusammenführung bereits an Remote übergeben wurde, habe ich verwendet git push -f um den entfernten Zweig nach dem Zurücksetzen zu aktualisieren.

    – zumek

    5. Juni 2020 um 6:47 Uhr

1646171289 154 Rollback einer Git Zusammenfuhrung
Jorge Orpinel Perez

git revert -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

Kann aber unerwartete Nebenwirkungen haben. Sehen --mainline parent-number Möglichkeit ein git-scm.com/docs/git-revert

Vielleicht wäre ein brutaler, aber effektiver Weg, den linken Elternteil dieses Commits auszuchecken, eine Kopie aller Dateien zu erstellen und auszuchecken HEAD erneut und ersetzen Sie den gesamten Inhalt durch die alten Dateien. Dann teilt dir Git mit, was zurückgesetzt wird, und du erstellst deinen eigenen Revert-Commit 🙂 !

Wenn Sie die Verzweigung zusammengeführt haben, dann haben Sie die Zusammenführung mithilfe einer Pull-Anforderung rückgängig gemacht und diese Pull-Anforderung zum Zurücksetzen zusammengeführt.

Der einfachste Weg, den ich fühlte, war:

  1. Nehmen Sie einen neuen Zweig aus der Entwicklung/dem Master heraus (wo Sie zusammengeführt haben)
  2. Kehren Sie das “zurücksetzen” mit zurück git revert -m 1 xxxxxx (wenn die Wiederherstellung mit einem Zweig zusammengeführt wurde) oder mit git revert xxxxxx wenn es sich um eine einfache Rückkehr handelte
  3. Der neue Zweig sollte nun die Änderungen enthalten, die Sie wieder zusammenführen möchten.
  4. Nehmen Sie Änderungen vor oder führen Sie diesen Zweig mit „develop/master“ zusammen

905200cookie-checkRollback einer Git-Zusammenführung

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

Privacy policy