Machen Sie eine Git-Zusammenführung rückgängig, die noch nicht gepusht wurde

Lesezeit: 9 Minuten

Machen Sie eine Git Zusammenfuhrung ruckgangig die noch nicht gepusht wurde
Matt Huggins

In meinem Master-Zweig habe ich a git merge some-other-branch lokal, aber die Änderungen wurden nie auf den Ursprungsmaster übertragen. Ich wollte nicht zusammenführen, also würde ich es gerne rückgängig machen. Wenn Sie a git status Nach meiner Zusammenführung bekam ich diese Meldung:

# On branch master
# Your branch is ahead of 'origin/master' by 4 commits.

Basierend auf einigen Anleitung die ich gefunden habeich habe versucht zu laufen

git revert HEAD -m 1

aber jetzt bekomme ich diese Meldung mit git status:

# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.

Ich möchte nicht, dass mein Zweig um eine beliebige Anzahl von Commits voraus ist. Wie komme ich zu diesem Punkt zurück?

  • Wenn Sie die Geschichte bewahren müssen, mit anderen Worten, es gibt eine Änderung, die jemals jemand von Ihnen gezogen hat, oder Sie haben sie irgendwo verschoben, verwenden Sie die Lösung in der Antwort von Yuri Ushakov unten!

    – Sedrik

    12. Oktober 2011 um 8:06 Uhr

  • Bitte deaktivieren Sie die aktuelle Gewinnerantwort, sie ist unsicher (wie viele darauf hingewiesen haben), obwohl sie immer noch Stimmen sammelt. Für mich sieht “MBO”-s am besten aus, obwohl es viel weniger Punkte hat.

    – Finger

    21. März 2013 um 14:23 Uhr

  • Wenn du musst Geschichte bewahrenverwenden Juri‘s Lösung unten! (nur einen Link zum @Sedrik-Kommentar hinzufügen)

    – Cregox

    17. September 2013 um 19:08 Uhr


  • Verwandt: Zu einem früheren Git-Commit zurückkehren.

    Benutzer456814

    13. Oktober 2015 um 11:04 Uhr

  • Dies ist eine großartige Ressource direkt von Github: Wie man mit Git (fast) alles rückgängig macht

    – Jasonleonhard

    3. Februar 2017 um 21:13 Uhr

Machen Sie eine Git Zusammenfuhrung ruckgangig die noch nicht gepusht wurde
Zufallstyp3

Angenommen, Ihr lokaler Master war dem Ursprung/Master nicht voraus, sollten Sie dazu in der Lage sein

git reset --hard origin/master

Dann Ihr Lokal master Zweig sollte identisch aussehen origin/master.

  • @Carter, es ist eigentlich nicht die beste Antwort. Es ist möglich, dass origin/master kurz vor der Zusammenführung um einige Commits vor Ihrem lokalen Master liegt, in diesem Fall führt dies möglicherweise nicht zu den gewünschten Ergebnissen

    – Dhruva Sagar

    22. Juni 2011 um 14:55 Uhr

  • @dhruva-sagar Ja, aber solange Git nicht sagt, dass du im Rückstand bist, und du nicht abholst, sollte es dir gut gehen.

    – Kelvin

    15. Dezember 2011 um 17:10 Uhr

  • Danke! Dies ist perfekt, wenn (und nur wenn) Sie ein Remote-Repository haben.

    – Tomc

    31. Januar 2013 um 10:59 Uhr

  • Nein, es ist nicht das perfekte für diese Frage, siehe die Klausel “annehmen”. Die Antwort von MBO deckt tatsächlich diesen Fall ab und den Fall, in dem die Zusammenführung nicht das einzige lokale Commit ist.

    – Finger

    21. März 2013 um 14:29 Uhr


  • Noch einmal, vielleicht das Warnung sollte in die Antwort selbst eingehen: Vermeiden Sie es immer, den Git-Verlauf neu zu schreiben!

    – Cregox

    17. September 2013 um 20:18 Uhr

  • @perfectionist stimmte zu 🙂 Ich wünschte, es gäbe eine Möglichkeit, diese Antwort auf eine andere Frage zu übertragen – (vielleicht gibt es eine?)

    – Mikermcneil

    16. April 2013 um 23:04 Uhr

  • Weitere Informationen zum Zurücksetzen: Verknüpfung

    – assaqqaf

    4. März 2014 um 2:22 Uhr

  • Um sicher zu sein, dass diese Rückkehr funktioniert hat, können Sie tun git diff hash1 hash2 Dabei ist hash1 der festgeschriebene Revert und hash2 der alte Commit, zu dessen Zustand Sie zurückkehren wollten. Keine Ausgabe == Erfolg! Ich konnte mehrere Commits zurücksetzen, indem ich dies mehrmals tat, indem ich damit begann, die letzte Zusammenführung rückgängig zu machen und rückwärts zu arbeiten. git diff hat mir gezeigt, dass ich in dem Zustand gelandet bin, den ich wollte.

    – Robert Sinton

    6. Mai 2014 um 9:41 Uhr


  • Beachte das das macht nicht tatsächlich die Frage des ursprünglichen Posters lösen. Das Originalplakat bereits benutzt git revert -m 1 <commit>. Das Problem ist, dass dies nicht die versehentliche Zusammenführung löscht, die er gemacht hat (und noch nicht gepusht hat). Die anderen Antworten, die Hard-Resets beinhalten, sind besser für das Problem des ursprünglichen Posters.

    Benutzer456814

    5. Juli 2014 um 18:12 Uhr

  • Dies ist eine großartige Ressource direkt von Github: Wie man mit Git (fast) alles rückgängig macht

    – Jasonleonhard

    3. Februar 2017 um 21:16 Uhr

1646888904 740 Machen Sie eine Git Zusammenfuhrung ruckgangig die noch nicht gepusht wurde
odinho-Velmont

Es ist seltsam, dass der einfachste Befehl fehlte. Die meisten Antworten funktionieren, aber wenn Sie die Zusammenführung rückgängig machen, die Sie gerade durchgeführt haben, Dies ist der einfache und sichere Weg:

git reset --merge ORIG_HEAD

Der Schiedsrichter ORIG_HEAD zeigt auf den ursprünglichen Commit von vor der Zusammenführung.

(Die --merge Option hat nichts mit der Zusammenführung zu tun. Es ist einfach wie git reset --hard ORIG_HEADaber sicherer, da nicht festgeschriebene Änderungen nicht berührt werden.)

  • Wenn Sie seitdem Ihren Arbeitsbaum verschmutzt haben, git reset --merge ORIG_HEAD bewahrt diese Änderungen.

    – yingted

    11. April 2013 um 11:59 Uhr

  • Dies ist das nur richtige Antwort (ich sage nicht, dass dies die beste Antwort ist – beachten Sie den Unterschied). Nehmen wir an, auf dem Master habe ich 3 Commits bei t1, t3 und t5 durchgeführt. Nehmen wir an, auf Branch1 habe ich 3 Kommentare zu t2, t4 und t6 gemacht (angenommen, t1, t2, t3, t4, t5 und t6 sind in chronologischer Reihenfolge). Jeder Befehl ähnlich zu git reset --hard HEAD~5 setzt nur HEAD zurück (kann Commits sowohl in master als auch in branch1 entfernen). Nur der --merge Option entfernt die merge.

    – Manu Manjunath

    17. Februar 2016 um 7:51 Uhr

  • @Manu Der --merge Option entfernt die Zusammenführung nicht wirklich, Sie können verwenden --hard es wird auch gut funktionieren. Es ist die Referenz ORIG_HEAD, die hier der Hinweis ist, sie wird gesetzt, bevor Sie eine Zusammenführung zu dem machen, wo Sie an diesem Punkt stehen. 🙂

    – Odinho-Velmont

    25. Februar 2016 um 10:26 Uhr

  • @yingted was meinst du mit “Wenn du deinen Arbeitsbaum seitdem verschmutzt hast, behält git reset –merge ORIG_HEAD diese Änderungen bei.” Meinten Sie, die Dateien nach dem Zusammenführen zu ändern? Wie auch immer, ich habe die Zusammenführung durchgeführt und dann einige Konflikte gelöst. Aber dann wollte ich die Zusammenführung zurücksetzen und habe die Anweisungen in dieser Antwort befolgt. Alles war in Ordnung und es hat meine Änderungen nach dem Zusammenführen nicht beibehalten. Mein lokales Repo ähnelt der Position, bevor ich die Zusammenführung durchgeführt habe.

    – Samitha Chathuranga

    9. Juni 2016 um 7:23 Uhr

  • Die git reset --hard ORIG_HEAD Der Befehl hat bei mir perfekt funktioniert – möglicherweise hat die Tatsache geholfen, dass ich nach dem local keine weiteren Änderungen am Repository vorgenommen habe git merge Ich habe versucht, es rückgängig zu machen. Der Befehl setzt einfach den Status des Repositorys auf den Zustand vor der Zusammenführung zurück. Danke für den tollen Tipp!

    – bluebinary

    27. Januar 2017 um 1:00 Uhr

Machen Sie eine Git Zusammenfuhrung ruckgangig die noch nicht gepusht wurde
Stefan van den Akker

Bei neueren Git-Versionen, wenn Sie die Zusammenführung noch nicht festgeschrieben haben und Sie haben einen Zusammenführungskonfliktkönnen Sie einfach Folgendes tun:

git merge --abort

Von man git merge:

[This] kann nur ausgeführt werden, nachdem die Zusammenführung zu Konflikten geführt hat. git merge --abort wird den Zusammenführungsprozess abbrechen und versuchen, den Zustand vor der Zusammenführung wiederherzustellen.

  • Wenn Sie seitdem Ihren Arbeitsbaum verschmutzt haben, git reset --merge ORIG_HEAD bewahrt diese Änderungen.

    – yingted

    11. April 2013 um 11:59 Uhr

  • Dies ist das nur richtige Antwort (ich sage nicht, dass dies die beste Antwort ist – beachten Sie den Unterschied). Nehmen wir an, auf dem Master habe ich 3 Commits bei t1, t3 und t5 durchgeführt. Nehmen wir an, auf Branch1 habe ich 3 Kommentare zu t2, t4 und t6 gemacht (angenommen, t1, t2, t3, t4, t5 und t6 sind in chronologischer Reihenfolge). Jeder Befehl ähnlich zu git reset --hard HEAD~5 setzt nur HEAD zurück (kann Commits sowohl in master als auch in branch1 entfernen). Nur der --merge Option entfernt die merge.

    – Manu Manjunath

    17. Februar 2016 um 7:51 Uhr

  • @Manu Der --merge Option entfernt die Zusammenführung nicht wirklich, Sie können verwenden --hard es wird auch gut funktionieren. Es ist die Referenz ORIG_HEAD, die hier der Hinweis ist, sie wird gesetzt, bevor Sie eine Zusammenführung zu dem machen, wo Sie an diesem Punkt stehen. 🙂

    – Odinho-Velmont

    25. Februar 2016 um 10:26 Uhr

  • @yingted was meinst du mit “Wenn du deinen Arbeitsbaum seitdem verschmutzt hast, behält git reset –merge ORIG_HEAD diese Änderungen bei.” Meinten Sie, die Dateien nach dem Zusammenführen zu ändern? Wie auch immer, ich habe die Zusammenführung durchgeführt und dann einige Konflikte gelöst. Aber dann wollte ich die Zusammenführung zurücksetzen und habe die Anweisungen in dieser Antwort befolgt. Alles war in Ordnung und es hat meine Änderungen nach dem Zusammenführen nicht beibehalten. Mein lokales Repo ähnelt der Position, bevor ich die Zusammenführung durchgeführt habe.

    – Samitha Chathuranga

    9. Juni 2016 um 7:23 Uhr

  • Die git reset --hard ORIG_HEAD Der Befehl hat bei mir perfekt funktioniert – möglicherweise hat die Tatsache geholfen, dass ich nach dem local keine weiteren Änderungen am Repository vorgenommen habe git merge Ich habe versucht, es rückgängig zu machen. Der Befehl setzt einfach den Status des Repositorys auf den Zustand vor der Zusammenführung zurück. Danke für den tollen Tipp!

    – bluebinary

    27. Januar 2017 um 1:00 Uhr

1646888906 46 Machen Sie eine Git Zusammenfuhrung ruckgangig die noch nicht gepusht wurde
Peter Mortensen

Sie sollten auf den vorherigen Commit zurücksetzen. Das sollte funktionieren:

git reset --hard HEAD^

Oder auch HEAD^^ um dieses Revert-Commit rückgängig zu machen. Sie können jederzeit eine vollständige SHA-Referenz angeben, wenn Sie nicht sicher sind, wie viele Schritte Sie zurückgehen sollten.

Falls Sie Probleme haben und Ihr Master-Branch keine lokalen Änderungen hatte, können Sie auf zurücksetzen origin/master.

  • Die meiner Meinung nach beste Antwort enthält die eigene des OP (unter der Annahme, dass nur ein Schritt zum Zurücksetzen erforderlich ist, was im Q der Fall zu sein schien) sowie die Verknüpfung von randomguy3 (die funktioniert, wenn „Ihr Master-Zweig keine lokalen Änderungen hatte “)

    – Finger

    21. März 2013 um 14:31 Uhr


  • Ihr Kommentatoren, @Inger und @Konstantin, warum? Sie sind hierher gekommen, nachdem meine Antwort erstellt wurde, und sie ist richtiger. Den KOPF nur eine Stufe nach oben zu gehen, ist oft falsch, und Sie müssten tatsächlich zählen, wie weit Sie nach oben gehen müssen. Git setzt bereits ORIG_HEAD für Sie, warum verwenden Sie es nicht?

    – Odinho-Velmont

    3. August 2014 um 9:55 Uhr

  • Wird es auch lokale Änderungen zurücksetzen? #Bitte aktualisieren.

    – Code

    11. April 2016 um 11:07 Uhr

  • Das hat bei mir perfekt funktioniert, ein solches Zurücksetzen des Kopfes ist viel sinnvoller als die Hälfte der Antworten hier.

    – Varda Elentári

    22. September 2016 um 18:00 Uhr

  • HEAD^ gleich Commit vor HEAD? und ^^ sind zwei Commits vorher? Vermuten Sie, dass dies bei Fast-Forward-Merges nicht funktioniert?

    – Markus Leon

    28. September 2016 um 16:17 Uhr

986310cookie-checkMachen Sie eine Git-Zusammenführung rückgängig, die noch nicht gepusht wurde

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

Privacy policy