336 Stimmen

Rückgängig machen eines Git-Merges

Entwicklungsbranche
--> Dashboard (Arbeitsbranche)

Ich benutze git merge --no-ff develop, um Änderungen aus der übergeordneten Quelle in das Dashboard zu integrieren

Git-Protokoll:

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

    Zusammenführung der Branches 'develop' und 'dashboard'

commit 888a5572428a372f15a52106b8d74ff910493f01
Autor: root 
Datum: Sun Jul 29 10:49:21 2012 -0500

    Korrektur der Anzeige für das Enddatum, um eine führende 0 zu haben

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

Die Zusammenführung hatte etwa 50+ Commits darin, und ich frage mich, wie ich die Zusammenführung rückgängig machen kann, damit das Dashboard wieder in den Zustand vor der Zusammenführung zurückkehrt

Der zweite Teil dieses Problems ist, dass wenn ich das Merge ohne --no-ff durchführe, fehlt mir der Commit 'Zusammenführung der Branches 'develop' und 'dashboard''. Wie kann ich diese Zusammenführung rückgängig machen?

3 Stimmen

Möglicher Duplikat von Git-Merge rückgängig machen?.

469voto

Christopher Punkte 39910

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

git reset --hard 

Sie können das mit git reflog, git log finden oder, wenn Sie sich trauen (und nichts anderes getan haben): git reset --hard HEAD@{1}

218voto

sturrockad Punkte 4205

Von hier:

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

git revert -m 1 

Git revert fügt einen neuen Commit hinzu, der den angegebenen Commit rückgängig macht.

Die Verwendung von -m 1 sagt Git, dass es sich um einen Merge handelt und wir zum Eltern-Commit im Master-Zweig zurückrollen möchten. Um den Entwicklungs-Zweig anzugeben, verwenden Sie -m 2.

48voto

Nico Erfurth Punkte 3282

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

Wenn Sie --no-ff verwenden, erstellt git immer einen Merge, auch wenn Sie nichts zwischendurch committet haben. Ohne --no-ff wird git einfach einen Schnellvorlauf machen, was bedeutet, dass der HEAD Ihrer Branches auf den HEAD des gemergten Branches gesetzt wird. Um dies zu lösen, finden Sie die Commit-ID, zu der Sie zurückkehren möchten, und verwenden Sie git reset --hard $COMMITID.

28voto

git revert -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

Es können jedoch unerwartete Nebenwirkungen auftreten. Siehe Option --mainline parent-number unter git-scm.com/docs/git-revert

Vielleicht wäre ein brutaler, aber effektiver Weg, den linken Elternteil dieses Commits auszuchecken, eine Kopie aller Dateien anzufertigen, erneut HEAD auszuchecken und alle Inhalte mit den alten Dateien zu ersetzen. Dann teilt dir Git mit, was zurückgerollt wird, und du erstellst deinen eigenen Revert-Commit :) !

4voto

Rohin Tak Punkte 482

Wenn Sie den Branch zusammengeführt haben, dann die Zusammenführung mit einem Pull-Request rückgängig gemacht haben und diesen Pull-Request gemerged haben, um die Änderungen zurückzunehmen.

Der einfachste Weg, den ich gefunden habe, war:

  1. Einen neuen Branch von entwickeln/master (wo Sie zusammengeführt haben) erstellen
  2. Die "Rückgängig"-Änderungen mit git revert -m 1 xxxxxx (wenn die Rücknahme mit einem Branch gemerged wurde) oder mit git revert xxxxxx, wenn es einfach war
  3. Der neue Branch sollte jetzt die Änderungen haben, die Sie erneut zusammenführen möchten.
  4. Änderungen vornehmen oder diesen Branch mit entwickeln/master zusammenführen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X