2011-01-06 7 views
1

Nach dem Code auf die einfachste Form reduziert, als Revision 100, 101 und dann 102, wenn das Problem, mich als einMit Mercurial (Hg), müssen wir nach dem Einchecken in Rev 100, 101 und 102, sie eins nach dem anderen entfernen?

hg backout -r 100 

gefunden wird getan werden, um alle Änderungen zu sichern? Oder müssen wir 102, 101 und dann 100 (dh eins nach dem anderen) rückgängig machen?

+0

„Wenn das Problem gefunden wird“, sind Sie permanent Changesets für eine temporäre Debug-Sitzung zu begehen einen Fehler zu finden? Klingt für mich wie ein falscher Arbeitsablauf. –

Antwort

0

Ein Ansatz ist , dann begehen gegen, im Wesentlichen, einen unbenannten Zweig im Wind wehende erstellen.

2

Ihr Befehl wird nicht tun, was Sie wollen - Backout tut nur einen einzigen Änderungssatz.

Es gibt jedoch einige Möglichkeiten, drei zusammenhängende Changesets zurückzusetzen, und es hängt wirklich alles davon ab, was Sie in Ihrem Verlaufsdiagramm haben möchten.

wäre der schnellste Weg sein:

hg diff -r 102 -r 99 | hg import --no-commit - 

die „nehmen den Unterschied zwischen 102 und 99 (man beachte die umgekehrte Reihenfolge) und wenden Sie es als Patch sagt Danach können Sie das Arbeitsverzeichnis überprüfen würde. und wenn Sie es mögen tun, um eine hg commit --addremove

der Nachteil ist, dass Ihre Geschichte graph wird wie folgt aussehen:.

--[99]---[100]---[101]---[102]---[103] 

Wo 103 ist das ne der kombinierten Veränderung von 100, 101 und 102. Das zeigt nicht, was wirklich passiert ist.

Besser wäre hg update 99 tun ein begehen, jede begehen, so dass nun Ihre Geschichte wie folgt aussieht:

--[99]---[100]---[101]---[102] 
    \ 
     [103]--- 

und dann tun hg --config ui.merge=internal:local merge 102, die 102 in 103 verschmolzen und nimmt aber keine der Änderungen von 100, 101 , 102.

das Ihre Geschichte, die wie verlassen:

--[99]---[100]---[101]---[102] 
    \      \ 
     [103]-------------------[104] 

die deutlicher sagt mir, was passiert ist. Entweder funktioniert das aber.

Oder Sie könnten wahrscheinlich nur tun:

hg backout 102 
hg backout 101 
hg backout 100 

, die Ihre Geschichte macht:

--[99]---[100]---[101]---[102]---[103]---[104]---[105] 

Wo 103, 104 und 105 sind die Umkehrungen von 102, 101, bzw. 100 , aber das ist nur dumm.

1

Angenommen, Sie wollen nicht länger etwas von Drehzahlen 100, 101, oder 102, eine ähnliche Antwort auf Ry4an zweite Vorschlag ist die folgende:

  • Von der Spitze, verwenden hg commit --close-branch - dies entfernt den Zweig aus der Liste von Köpfen und erzählt der Welt, in der Tat werde ich nicht mehr darüber hinaus entwickeln. (Dies entspricht 103 in der folgenden Grafik zu begehen)
  • Updates auf die letzte gute Revision (hg update 99), weiter wie gewohnt funktionieren, und neue Commits machen (104 begehen, 105 in der Grafik unten)

Die graph resultierende erscheint wie:

--[99]---[100]---[101]---[102]---[103]---X 
    \      
     [104]---[105]---... 

Der feine Unterschied ist, dass es keine „fake merge“ (wo man nur nehmen die Änderungen von einem Elternteil).

0

Wollen Sie wirklich zurück die schlechten changesets, so dass Sie weiterhin von changeset 99 arbeiten, aber Sie sehen 100 - 102 in der Geschichte?

Oder willst du sie komplett loswerden (damit sie sogar aus der Geschichte verschwinden)?
Wenn ja, können Sie einfach auf das Repository klonen, aber die schlechten Change auszuschließen:

Mercurial: Fix a borked history

Verwandte Themen