2017-12-20 16 views
1

Ich habe meine eigene Niederlassung in einem Projekt, wo es 2 Entwicklungszweige gibt (nennen wir sie "die Neue" und "die Alte". Ich fusionierte mit "der Neuen") , dann bin ich irrtümlich mit "dem Alten" verschmolzen und jetzt ist mein Zweig ein totales Durcheinander.Mercurial: bekomme eine genaue Kopie eines Zweigs

Gibt es irgendeine Möglichkeit für mich, meine Filiale genau wie "die Neue" aussehen zu lassen, ohne einen neuen Zweig zu erstellen? ich kümmere mich nicht um meine Änderungen gehen dabei verloren, es ist nur ein paar Zeilen, und ich kann es wieder tun.

+1

Dies ist eine professionelle Website. Lassen Sie uns bitte die Sprache sauber und sicher für die Arbeit halten. –

Antwort

1

Anstatt alles auszulöschen, warum nicht auslöschen genau die eine schlechte merge?

Mercurial ermöglichen s Sie zu entfernen eine Revision, vorausgesetzt, Sie entfernen auch alle Commits, die Nachkommen dieser Revision sind. Dies ist eine Erweiterung, aber es ist mit allen modernen Versionen von Mercurial (seit 2.8) gebündelt, so dass Sie es nur aktivieren müssen, indem Sie strip = zu Ihrem [extensions] Abschnitt Ihrer Konfiguration hinzufügen.

Das Zusammenführen (und dann das Zusammenführen der Zusammenführung) erstellt eine Revision. Sie sagen (ich denke), dass Sie zuerst hg merge <correct thing> ausgeführt und committed, dann lief hg merge <incorrect thing> und verpflichtet.

In diesem Fall ist die letzte Revision die falsche, die Sie entfernen möchten. Dies würde alle Revisionen entfernen, die ebenfalls von der Zusammenführung abstammen, aber wenn das letzte, was Sie getan haben, hg merge <incorrect thing> && hg commit war, gibt es sowieso keine solchen Revisionen.

Also, herauszufinden, was die falsche Revisionsnummer ist-Lauf hg log, um zum Beispiel die letzten Revisionen zu sehen-und dann hg strip -r <wrongrev> laufen. Dadurch wird diese Revision (und alle ihre Nachkommen) entfernt.

Siehe auch https://www.mercurial-scm.org/wiki/StripExtension und this answer bis Mercurial — revert back to old version and continue from there.

+0

Der Strip-Ansatz funktioniert nur, wenn die Changesets nirgendwo anders verschoben wurden. Wenn alles noch lokal für eine Maschine ist, ist es die richtige Lösung. – DaveInCaz

+0

@DaveInCaz: Richtig, wenn sie in andere Kopien des Repositories gesendet wurden, müssten Sie sie auch von diesen Kopien entfernen (was wiederum bedeutet, dass es wichtig ist, dass niemand * neue * Commits auf ihnen erstellt hat dort entweder). – torek

Verwandte Themen