2016-04-07 7 views
-1

nicht enthält Also habe ich ein Repository in mercurial wie auf dem Bild unten beschrieben. Ich muss ein neues Commit aber ohne Änderungen, die durch zwei commits getan wurde, erstellen. Benennen Sie diese 2 Commits als "commit 4" und "commit 16". Aber ich kann nicht einfach "die Geschichte umschreiben" und diese Commits löschen.Erstellen Sie ein neues Commit, das einige alte

enter image description here

+0

Meinen Sie, Sie möchten diese Änderungen rückgängig machen oder diese Änderungen "rückgängig machen", was bedeutet, dass Sie sie rückgängig machen möchten, Änderungen vornehmen, die die Änderungen effektiv entfernen, die diese Änderungssets eingeführt haben? Mit anderen Worten, wenn Changeset 4 etwas hinzugefügt hat und Changeset 16 etwas geändert hat, möchten Sie, dass Ihr neues Changeset die hinzugefügten 4 entfernt und wieder so ändert, wie es vor dem Commit von Changeset 16 war. –

+0

Ja, neue changeset sollte entfernen, das in 4 war und ändern zurück, die bei 16 war. –

+0

Aber anders als das sollte es alles enthalten, das in der Top-Changeset ist, lasst es Label Changeset 23, habe ich es dann richtig verstanden? –

Antwort

1

verschmelzenden Die Antwort ist einfach: backout die Changesets Sie brauchen oder wollen nicht mehr:

hg backout -rXXX 

wobei XXX die Revision des Changeset, das Sie sehen möchten, ist weg. Also in Ihrem Fall zuerst Ihre letzte changeset (z. B. 23) auschecken, dann:

und Ihre Aufgabe ist erledigt.

1

Hier ist, was ich verstehe, was Sie tun möchten:

  1. Nehmen Sie die oberste (letzte) changeset, lassen Sie uns diese changeset nennen 23
  2. "Rückgängig" was auch immer changeset 4 und ChangeSet 16 tat im oberen Teil der

Sie Dies gibt:

  1. Changeset 23 ist nach wie vor intakt, komplett mit allem, was changeset 4 und 16 hat
  2. Ihr neuer changeset (n) wie 23 sein würde, es sei denn, ohne was changeset 4 und 16
  3. tat

Hier ist, wie dies zu tun , hier ist die Geschichte vor den Operationen:

 23 
    | 
    ... 
    | 
    16 
    | 
    ... 
    | 
    4 
    | 
    ... 
  1. Update auf die oberste changeset
  2. eine backout changeset erstellen für changeset 4 und verpflichten sie, begangen wird diese auf der changeset 23
  3. ein backount changeset für changeset Erstellen 16 und verpflichten sie, wird dies auf der changeset 24

Ihre Geschichte sollte jetzt verpflichtet werden, aussehen wie folgt aus:

 25 (-16) 
    | 
    24 (-4) 
    | 
    23 
    | 
    ... 
    | 
    16 
    | 
    ... 
    | 
    4 
    | 
    ... 

Beachten Sie, dass:

  • Changeset 23 enthält noch changeset 4 und 16
  • Änderungssatz 25 enthält Änderungssatz 23, aber die Änderungen von 4 und 16 wurden umgekehrt (rückgängig gemacht)
  • Wenn Änderungen in 5 und höher auf Änderungen basieren, die in Änderungssatz 4 eingeführt wurden, und/oder Änderungen in 17 und höher auf Änderungen basieren in changeset 16, erhalten Sie Konflikte zusammenführen, müssen Sie diese behandeln, wenn
+0

Danke für die Antwort. Ich werde es versuchen und Sie wissen lassen, ob es funktioniert. –

+0

Es funktioniert! Danke vielmals! –

+0

Während die Antwort funktioniert, ist es IMHO viel zu kompliziert. Warum zuerst auf die Changesets updaten? Sie können einfach zu changeset 23 updaten und dann die unerwünschten changesets direkt rückgängig machen, ohne merge zu müssen. – planetmaker

Verwandte Themen