Ich benutze Mercurial und bin vor Ort mit drei Köpfen in ein schreckliches Chaos geraten. Ich kann nicht pushen und möchte nur alle meine lokalen Änderungen und Festschreibungen löschen und erneut mit völlig sauberem Code und einem sauberen Verlauf beginnen.
Mit anderen Worten, ich möchte am Ende (a) genau den gleichen Code lokal haben, der in der Spitze des Remote-Zweigs vorhanden ist, und (b) keine Historie lokaler Commits.
Ich weiß, hg update -C
dass lokale Änderungen überschrieben werden. Aber wie lösche ich lokale Commits?
Um es klar auszudrücken, ich habe kein Interesse daran, meine Arbeit vor Ort zu bewahren. Ich möchte nur den einfachsten Weg, um zu einer völlig sauberen lokalen Kasse zurückzukehren.
version-control
mercurial
dvcs
head
Richard
quelle
quelle
Antworten:
Wenn der einfachste Weg (ein neuer
hg clone
) nicht praktikabel ist, benutze ichhg strip
:Wiederholen, bis es
hg outgoing
ruhig bleibt. Beachten Sie, dasshg strip $rev
Auslöscher$rev
und alle seine Nachkommen.Beachten Sie, dass Sie möglicherweise zuerst
strip
in Ihren Mercurial-Einstellungen aktivieren müssen .PS: Ein noch intelligenterer Ansatz ist die Verwendung der Revset-Sprache.
quelle
hg strip 'roots(outgoing())'
zur Arbeit zu kommen, weil er es nicht erkennt'roots(outgoing())'
. Ich konnte es zum Laufen bringenhg strip "roots(outgoing())"
.cmd.exe
, ja.Sie möchten einen lokalen Klon erstellen, in dem Sie nur die Änderungssätze beibehalten, die auch im Remote-Repository vorhanden sind. Verwenden TortoiseHg ,
hg log
oder ähnlich , um herauszufinden , welche Ihre Änderungen ist , dass neueste Revision Sie nicht (die vor dem Chaos beginnt) machen. Die Verwendunghg outgoing
kann hier helfen - es werden alle von Ihnen vorgenommenen Änderungssätze aufgelistet - wählen Sie eine Revisionsnummer früher als eine dieser.Wenn die Zielversion aufgerufen wird
good
und Ihr Klon aufgerufen wirdfoo
, gehen Sie wie folgt vor :Dies ist eine schnelle, lokale Operation - es gibt keinen Grund, alles erneut herunterzuladen . Der
foo-clean
Klon enthält nur Änderungssätze bis zur Überarbeitunggood
. Sie können nun ersetzenfoo-clean/.hg/hgrc
mit ,foo/.hg/hgrc
um Ihre Repository-lokalen Einstellungen wie der Standard Push / Pull - Pfad zu bewahren.Wenn Sie zufrieden
foo-clean
sind und alles haben, was Sie brauchenfoo
, löschen Sie es einfachfoo
und benennen Sie esfoo-clean
in umfoo
.hg pull
Führen Sie a aus , um neue Änderungssätze aus dem Remote-Repository in Ihren Klon zu übernehmen, und fahren Sie wie gewohnt fort.Wenn niemand neue Änderungssätze in das Remote-Repository verschoben hat, ist es sehr einfach zu bestimmen, welche Revision Sie wie
good
oben verwenden möchten :hg id default
Sie erhalten die ID des Tipps im Remote-Repository.quelle
hg pull -r
für die letzte "gute" Revision jedes weiteren Zweigs.OK. Löschen Sie einfach alle lokalen Inhalte,
hg init
das neue lokale Repository undhg pull
den neuesten Tipp, den Sie haben. Vergiss nichthg update
danach.quelle
hg init
+hg pull
=hg clone
Der Unterschied besteht darin,hg clone
dass eine schöne.hg/hgrc
Datei für Sie erstellt wird undhg clone
Hardlinks verwendet werden, um beim Klonen auf demselben Dateisystem Speicherplatz zu sparen.hg help init
ist hier: selenic.com/mercurial/hg.1.html#init Aber vielleicht ist das zu knapp? Bitte senden Sie eine Mail an unsere Mailingliste, wenn Sie weitere Hilfe benötigen! Siehe: mercurial.selenic.com/wiki/MailingListsSie können verwenden
um jede Revision und ihren Teilbaum in Ihrem lokalen Repository zu beenden.
https://www.mercurial-scm.org/wiki/Strip
Aber versuchen Sie nicht, es für etwas zu verwenden, das bereits gepusht wurde.
quelle
Löschen Sie einfach alles, was Sie auf Ihrem lokalen System haben, und klonen Sie das Remote-Repo erneut.
quelle
macht den Trick für mich.
Es werden alle Revisionen entfernt, die nicht in das Standard-Repository verschoben wurden und mit Ihrem Autorennamen erstellt wurden.
Sie können diesen Stil auch verwenden, um die Überprüfung nicht mit dem Standard-Repository, sondern mit einem anderen Repository durchzuführen
quelle
Wenn Sie TortoiseHg verwenden, besteht eine einfache Möglichkeit, aus einem (kleinen) Durcheinander herauszukommen, darin, zuerst auf die neueste Version zu aktualisieren, dann Ihre Änderungssätze auszuwählen und "Zusammenführen mit lokal" zu initiieren. Wenn der Zusammenführungsdialog angezeigt wird, klicken Sie einfach auf das kleine '+' - Symbol, um einige zusätzliche Optionen anzuzeigen. Eine davon ist "Änderungssätze aus der (anderen) Revision des Zusammenführungsziels verwerfen". Wenn Sie dies tun, befinden sich Ihre Änderungssätze weiterhin im Repo und werden gepusht, haben jedoch keine Auswirkung, da sie beim Zusammenführen verworfen werden. Wenn Sie viele Änderungssätze haben, die sich über viele Köpfe erstrecken, möchten Sie das Repo möglicherweise nicht auf diese Weise verschmutzen, aber es ist eine einfache Lösung und eine Überlegung wert, wenn die von Ihnen verworfenen Änderungssätze Daten enthalten, auf die Sie später möglicherweise verweisen möchten.
quelle