Wie kann ich eine hg-Zusammenführung aufgeben?

131

Ich bin neu in der Zusammenarbeit mit Mercurial. Meine Situation:

  • Ein anderer Programmierer hat Version 1 einer Datei geändert, um Einrückungen mit 4 Leerzeichen durch Einrückungen mit 2 Leerzeichen zu ersetzen. (Dh jede Zeile geändert.) Rufen Sie diese Version 2 auf und drücken Sie sie auf das Remote-Repo.
  • Ich habe wesentliche Änderungen Rev. 1 mit verschiedenen Codeänderungen in meinem lokalen Arbeitsbereich vorgenommen. Nennen Sie das Rev. 3.
  • Ich habe hg pulled und hg merged ohne eine klare Vorstellung davon, was los war.
  • Die Konflikte sind unzählig und nicht wirklich substanziell.

Ich wünschte wirklich, ich hätte mein lokales Repo vor dem Zusammenführen in 2-Leerzeichen-Einrückungen geändert. dann wird die Zusammenführung trivial sein (ich nehme an). Aber ich kann nicht zurücktreten. Ich denke ich muss hg update -r 3aber es heißt abort: outstanding uncommitted merges.

Wie kann ich die Zusammenführung rückgängig machen, den Abstand in meinem lokalen Repo ändern und erneut zusammenführen?

Grumdrig
quelle

Antworten:

126

Sie können nicht festgeschriebene Änderungen mit dem Flag -C (oder --clean) verwerfen:

hg update -C -r 3

ACHTUNG: Alles, was nicht begangen wurde, wird weg sein!

Danach sollten Sie wahrscheinlich eine Art Code-Formatierer verwenden, um den gesamten Vorgang auszuführen, oder zumindest einige finden und durch reguläre Ausdrücke ersetzen. Etwas so Einfaches wie das Ersetzen der Übereinstimmungen ^____(verwenden Sie 4 Leerzeichen anstelle von Unterstrichen) durch __(2 Leerzeichen), das einige Male wiederholt wird (es sei denn, Sie haben wahnsinnig verschachtelten Code), sollte funktionieren.

R. Martinho Fernandes
quelle
Oh Danke. Sie müssen richtig geantwortet haben, als ich es selbst herausgefunden habe. Ich bin in Emacs, M-x indent-regiongenau wie der Trick mit der Wiederholung.
Grumdrig
6
Beachten Sie, dass nicht verfolgte Dateien nicht entfernt werden.
DJSutho
132

Übrigens: Wenn Sie die von Ihnen vorgenommene Zusammenführung nur rückgängig machen und 3 nicht Ihre Revisionsnummer ist, können Sie dies tun:

hg update -C -r .
Mathematik
quelle
24
Für jemanden wie mich hat das zunächst nicht verstanden, wie das funktioniert: Der Punkt .ist eine Abkürzung zur vorherigen Revision.
Jeroen Wiert Pluimers
1
gute Antwort! sollte am besten sein
Oleg Abrazhaev
1
@Thymine: Von hg help updateIch bekomme: Wenn kein Änderungssatz angegeben ist, aktualisieren Sie auf den Tipp des aktuell benannten Zweigs ... und Tipp ist möglicherweise nicht immer Ihre aktuelle Revision, an der Sie arbeiten. Ich habe es bisher nicht getestet ..
Mathe
1
Ah , die ein gutes Detail zu wissen , ist ... eigentlich Weglassen Ich werde meinen Kommentar löschen behauptet , -r .ist die gleiche
Thymin
Einfach und sehr hilfreich.
Naveen Kumar V
33

Verwenden Sie, um eine nicht festgeschriebene Zusammenführung rückgängig zu machen

hg update --clean

Dadurch wird eine saubere Kopie des ursprünglichen übergeordneten Merges ausgecheckt, wobei alle Änderungen verloren gehen.

Tao
quelle
2

Ich musste anscheinend nur hg update -C -r 3, was meine lokalen Dateien mit Blick auf die Drehzahl überschreibt (was ich dachte, hg updatewürde tun; aber ich habe mich geirrt.) Danke für meine Hilfe!

Grumdrig
quelle
2
Durch Hinzufügen von -Coder --cleanwird Mercurial angewiesen, fortzufahren, auch wenn dadurch einige geänderte Dateien weggeworfen werden. Sie haben Recht, das hg update -r Xbringt Sie normalerweise zur Revision X, aber wenn Sie sich in einer Fusion befinden, müssen Sie ein bisschen mehr darauf bestehen :-)
Martin Geisler
7
Ich denke, dass "hg revert --all --cancelmerge" viel intuitiver wäre.
Warren P