Mercurial - Zurücksetzen einer alten Zusammenführung

8

Ich habe einen Zweig, der so aussieht:

%Vor%

Dabei ist C eine Zusammenführung von 2 und seinen Vorfahren.

Ich erkenne jetzt, dass ich nicht verschmolzen hätte. Ich könnte zurück zu B und graft D ... Z gehen, aber das ist eine Menge Arbeit. Kann ich JUST C zurücksetzen?

Wenn ich versuche hg backout --merge C zu erhalten, bekomme ich abbrechen: kann keine Zusammenführungs-Änderungsmenge zurücksetzen .

Diese Änderungen wurden in den zentralen Repo verschoben und ich möchte den Verlauf nicht ändern, ich möchte nur die Umkehrung von 2 und die Vorfahren zurück zum gemeinsamen Nachkommen mit B .

    
George Mauer 08.08.2013, 22:07
quelle

5 Antworten

8

Ein bisschen spät, aber ich hatte die gleiche Situation vor einer Weile. Das hat für mich reibungslos funktioniert:

%Vor%

Grundsätzlich ist dies genau das, was ein Backout macht.

HAFTUNGSAUSSCHLUSS: Bitte beachten Sie jedoch, dass Sie, wenn Sie später den Zweig 1 & gt; 2 später erneut zusammenführen möchten, mit einigen Problemen konfrontiert werden. Und "einige Probleme" ist hier ein etwas euphemistischer Begriff. In einem solchen Fall können sogar GROSSE PROBLEME auftreten. Dieses Szenario ist vor allem deshalb gefährlich, weil die Probleme viel später und völlig unerwartet auftreten können. Es wird dringend empfohlen, den Zweig "1" vollständig zu verlassen, um diese Risiken zu vermeiden. (Siehe auch die Kommentare unten.)

Weitere Informationen finden Sie auf der Backout-Wiki-Seite .

    
Marwin 26.11.2013 09:47
quelle
6

Die Zusammenführung ist öffentlich und es gibt öffentliche Commits für diese Zusammenführung

Angenommen, wir haben diese veröffentlichte Historie von Commits (oben ist die neueste):

%Vor%

Stattdessen hätten wir gerne einen Topzustand, als hätten wir diese Geschichte:

%Vor%

So erreichen Sie dies (Schritt für Schritt)

  1. Lassen Sie den Verlauf nach dem Merge-Commit (rev4 - rev5) in einen Commit

    umwandeln %Vor%
  2. Kopiert Änderungen nach der Zusammenführung ('rev6') in die gewünschte Verzweigung ('rev1')

    %Vor%
  3. Erstellen Sie ein "Zurücksetzen" Commit

    %Vor%
  4. Reinigen Sie die temporären Commits

    %Vor%
Marcin Raczyński 19.10.2016 22:18
quelle
2

Verwenden Sie das Backout-Tool, aber seien Sie sich dessen bewusst, was Sie tun:

  1. Aktualisieren Sie den Zusammenführungsänderungssatz (C)
  2. Klicken Sie mit der rechten Maustaste auf den Änderungssatz - & gt; Klicken Sie auf Zurück
    • Nachdem Sie eine Verzweigung in der Verzweigung ausgeführt haben, müssen Sie sie nicht übernehmen sofort. Überprüfen Sie besser vorher, wenn es (unter Änderungen, die entstanden sind Nach der Auswahl von Backout Option) sind einige Änderungen von anderen Zweige, die Sie nicht zurückgeben möchten. Wenn ja, deaktivieren Sie sie vorher verpflichten.
  3. Klicken Sie auf Commit
    • Wenn Sie den Zweig 1-2 (oder "nummerierter Zweig") jetzt (oder später) in den Zweig A-Z zusammenführen würden, würden Sie alle Änderungen von "nummerierter Zweig" vor dem Änderungssatz 2 (einschließlich) verlieren - das ist was Warnung in @ Marvins Antwort geht es um.
    • Um das zu vermeiden, müssen Sie diese Zurücksetzung in "nummerierte Verzweigung" propagieren und Änderungen rückgängig machen (spätere Schritte).
  4. Wenn der Zweig A-Z kein direkter Ahnen des "nummerierten Zweiges" ist, dann suchen Sie den ersten Nachkommenzweig zwischen A-Z und 1-2 und aktualisieren Sie workbench auf seinen Tipp.
  5. Klicken Sie mit der rechten Maustaste auf die neueste Version in A-Z (= backout) - & gt; Klicken Sie auf Zusammenführen mit lokal
    • Wenn mehr Zweige zwischen A-Z und 1-2 vorhanden sind, wiederholen Sie die Schritte 4. und 5.
    • Verschmelzen Sie nichts mit dem Zweig 1-2 yet.
    • Hinweis: Fügen Sie einen Zweig immer nur in den Zweig ein, aus dem er stammt! Andernfalls riskieren Sie, dass nach einer späteren Zusammenführung einige Änderungen verloren gehen.
  6. Aktualisiere auf den Tipp von "nummerierter Zweig".
  7. Finden Sie alle Dateien (im Dateisystem), die durch Zurücksetzen geändert wurden, und kopieren Sie sie in ein temporäres Verzeichnis.
  8. Klicken Sie mit der rechten Maustaste auf die neueste Version des Ahnenstors der nummerierten Niederlassung - & gt; Klicken Sie auf Zusammenführen mit lokal
  9. Kopieren Sie die Dateien aus Schritt 7 zurück in das Dateisystem.
  10. Überprüfen Sie die Änderungen in worbench und deaktivieren Sie alle Änderungen, die nicht vom Zweig 1-2 stammen (zB Änderungen von den Revisionen D - Z ).
    • Leider muss dies manuell überprüft werden. Aber es ist der einzige sichere Weg, um beide Zweige zu korrigieren.
  11. Klicken Sie auf commit

Tipp: Um wirklich sicher zu sein, welche Dateien von einer Zusammenführung betroffen sind, klicken Sie mit der rechten Maustaste auf diese Revision und klicken Sie auf Diff to parent

Dies ist im Grunde ein Szenario, das wir heute verwendet haben, als wir herausfanden, dass ein Zweig (der sich noch in der Entwicklung befand) versehentlich in den Standard (anstatt eines anderen, der im Revisionsgraphen die gleiche Farbe hatte :) eingefügt wurde. (Beide Zweige hatten nach dieser Zusammenführung Änderungen vorgenommen.) Es scheint zeitaufwendig zu sein, aber immer noch besser als nur eine Rückvereinigung durchzuführen und zahlreiche unerwartete Fehler Tage (oder Wochen) später zu finden. (Eigene Erfahrung.)

    
juice 12.08.2016 16:42
quelle
1

Sie könnten das Thg-Backout-Tool verwenden.

  1. Aktualisieren Sie den Zusammenführungsänderungssatz (C)
  2. thg Zurücksetzung
  3. Wählen Sie aus, welches Elternelement zurückgesetzt werden soll (unabhängig davon, welche Revision für (2) verwendet wird) - Beachten Sie, dass Sie das Dialogfeld auswählen, dessen Änderungen nicht zurückgehalten werden .
  4. Klicken Sie auf Weiter
  5. Klicken Sie auf Commit

Dadurch wird ein neuer Kopf erstellt, den Sie mit Z zusammenführen oder auf Z auflösen müssen.

    
Tom 09.08.2013 13:12
quelle
1

Sie können D auf Z auf B umbuchen. Die Dokumentation für Rebase behandelt sogar einige ähnliche Situationen. Dies sollte in einem Befehl möglich sein.

    
Livius 09.08.2013 14:40
quelle

Tags und Links