2016-06-30 22 views
0

Haftungsausschluss: Ich bin neu in der Software-Entwicklung, so dass meine Terminologie nicht korrekt sein kann.Bereinigen lokalen Niederlassungen in mercurial

Der aktuelle Quellcode sieht wie folgt aus etwas (dieses Projekt verwenden Mercurial für die Versionskontrolle):

---(r 1000) -> (r 1001) -> (r 1002) master, remote 
     \ 
    (r 1003) -> (r 1004) -> (r 1005) feature1, local 

benutzte ich einen proprietären 3-rd Party-Header in (r 1004) und ersetzt damit eine Open-Source-Alternative in (r 1005). Mein Verständnis ist, dass es immer noch im Protokoll angezeigt wird, was ich vermeiden möchte. Ich möchte (r 1004) vollständig löschen. Wie mache ich das, indem ich die obige Darstellung als Beispiel verwende?

Antwort

0

Sie müssen hg strip oder hg histedit verwenden. In diesem speziellen Fall hg strip -r 1004.Korrektur: Verwenden Sie hg histedit, z. B. hg histedit --outgoing (für weitere Informationen siehe hg help histedit). Beide strip und histedit waren einmal eine externe Erweiterung, sind aber jetzt gebündelt (ich bin nicht sicher, genau welche Version (en) von Mercurial sie als Standard hinzugefügt).

Beachten Sie, dass Sie diese bestimmte Revision manuell aus jedem Repository entfernen müssen, das sie enthält, andernfalls wird sie immer wieder kommen. (Dasselbe Problem tritt bei Git auf, das ich erwähne, weil die Frage aus irgendeinem Grund mit markiert ist.)

+0

Wird 'hg strip -r 1004'' r 1003 -> r 1005' im lokalen Zweig behalten? – user103500

+0

Ja, es ist eine Art wie Git 'Rebase -i' und Löschen einer 'Pick'-Linie, in Bezug auf den Gesamteffekt (obwohl die zugrunde liegende Implementierung ist ganz anders). Beachten Sie, dass hg jetzt auch "histedit" hat, was noch mehr wie "git rebase -i" ist (und ähnlicher in der Implementierung). – torek

+0

Erk, ich habe gerade die Mercurial 'strip'-Dokumentation überprüft und es heißt, dass sie die Revision * und alle ihre Nachkommen * entfernt. Meine Antwort hier war falsch. Sie müssen stattdessen "hg histedit" verwenden! – torek