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
.
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 .
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%Lassen Sie den Verlauf nach dem Merge-Commit (rev4 - rev5) in einen Commit
umwandeln %Vor%Kopiert Änderungen nach der Zusammenführung ('rev6') in die gewünschte Verzweigung ('rev1')
%Vor%Erstellen Sie ein "Zurücksetzen" Commit
%Vor%Reinigen Sie die temporären Commits
%Vor%Verwenden Sie das Backout-Tool, aber seien Sie sich dessen bewusst, was Sie tun:
Backout
Option) sind einige Änderungen von anderen
Zweige, die Sie nicht zurückgeben möchten. Wenn ja, deaktivieren Sie sie vorher
verpflichten. 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. 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. A-Z
(= backout) - & gt; Klicken Sie auf Zusammenführen mit lokal
A-Z
und 1-2
vorhanden sind, wiederholen Sie die Schritte 4. und 5. 1-2
yet. 1-2
stammen (zB Änderungen von den Revisionen D
- Z
).
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.)
Sie könnten das Thg-Backout-Tool verwenden.
Dadurch wird ein neuer Kopf erstellt, den Sie mit Z zusammenführen oder auf Z auflösen müssen.
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.
Tags und Links mercurial