Es gibt ein Commit, das einfach nicht funktioniert hat, daher möchte ich es aufgeben, ohne es aus dem Verlauf zu löschen .
Ich habe von einer früheren Revision aktualisiert und mich verpflichtet, wodurch ein neuer Kopf erstellt wurde.
Ich habe keine Zweige, ich möchte keine Zweige, ich möchte einfach mit dem neuen Kopf genau so weitermachen, wie er ist, nichts Besonderes, keine Verschmelzung, keine Sorgen, vergiss einfach den vorherigen.
Ich kann anscheinend nicht herausfinden, wie das geht, und ich fange an zu glauben, dass es nicht geht. Ich finde nur Dinge über Zweige oder Dinge über das Zusammenführen.
Antworten:
Aktualisieren Sie Ihr Repository auf den Kopf mit der Revision, die Sie vergessen möchten, und
hg commit --close-branch
markieren Sie dann diesen (anonymen) Zweig als geschlossen. Aktualisieren Sie dann auf den Leiter des Zweigs, den Sie ausführen wollen, und die Arbeit fortsetzen.Sie können den geschlossenen Zweig weiterhin sehen, wenn Sie die
-c
Option verwendenhg heads
, aber er wird standardmäßig nicht angezeigt undhg merge
nicht weiß, dass Sie nicht versuchen, mit dem geschlossenen Kopf zusammenzuführen.Sie müssen
hg push --force
das erste Mal verwenden, wenn Sie diesen geschlossenen Kopf in ein anderes Repository verschieben, da Sie beim Push tatsächlich zusätzliche Köpfe im Remote-Repository erstellen. Sagen Sie Mercurial also, dass dies in Ordnung ist--force
. Menschen, die am geschlossenen Kopf ziehen, werden von Warnungen nicht gestört.quelle
hg heads
anrufe ... Ich verwende mercurial 1.4.3, ist das eine neuere Funktion?hg branches
sollte immer noch den Filialnamen anzeigen, auf dem Sie sich befinden. Anstatt zu versuchen, den Zweig zu schließen, führen Sie Ihren anonymen Zweig wieder in den ursprünglichen Zweig ein und verwerfen Sie alle Änderungen.Ich weiß, dass Sie zu diesem Zeitpunkt nicht mit Filialen arbeiten möchten , aber genau das haben Sie getan. Wenn Sie zu einer früheren Version zurückgekehrt sind und etwas festgeschrieben haben, das funktioniert hat, haben Sie einen Zweig erstellt - einen unbenannten Zweig, aber trotzdem einen Zweig.
Es ist kein Problem, einfach so weiterzumachen, wie Sie sind, und sich keine Sorgen um mehrere Köpfe zu machen. Wenn Sie jedoch aufräumen möchten, damit Sie nicht versehentlich einmal den falschen Kopf auswählen, können Sie den alten Ast töten.
In der Mercurial-Dokumentation gibt es einen guten Abschnitt, der Sie durch eine Reihe von Optionen rund um das Beschneiden toter Zweige führt .
Ich denke, die beste Option für Sie ist es, den alten Zweig als "geschlossen" zu markieren. Wenn Ihr alter Kopf Revision "123" ist, dann:
quelle
-C
inhg update
? Es scheint, dass keine Dateien geändert worden wären, also sollte es ohne sie funktionieren.Geben Sie zunächst Folgendes ein:
Stellen Sie sich vor, Sie haben drei Köpfe aufgelistet:
Angenommen, Sie möchten den letzten Kopf aktiv halten (223) und den Rest schließen.
Sie würden dann wie folgt vorgehen:
Kopf Nr. 59 schließen
Kopf Nr. 123 schließen
Übernehmen Sie die Änderungen
Vergessen Sie nicht, am Ende zum rechten Kopf zu wechseln
Und du bist fertig.
quelle
--close-branch -m "Closing branch - technique #2 abandoned in favor of technique #3"
.hg up -r 223
bevor Sie Änderungen vornehmen.hg push --force
nicht nurhg push
die Warnung über das Drücken mehrerer Köpfe überwinden .hg push
hat es für mich nicht funktioniert. Wie empfehlen Sie, Änderungen an einem externen Repo vorzunehmen, wenn es aufgrund mehrerer Köpfe abgelehnt wird?Sie möchten verwenden
hg backout
. Dadurch werden die vom Änderungssatz vorgenommenen Änderungen aus jedem untergeordneten Änderungssatz entfernt.Überprüfen Sie dies für eine gute Erklärung. Mercurial Backout
quelle
Sowohl Nialls als auch Nicks Antworten sind direkt. Da ich viele baumelnde Köpfe erschaffe, habe ich einen Alias geschrieben, um die Köpfe leichter zu schließen. Indem Sie dies zu Ihrem hinzufügen
.hgrc
:(Wenn Sie bereits einen
[alias]
Abschnitt haben, können Sie ihn stattdessen anhängen.)Sie können jetzt einen Kopf in einem einzigen Befehl schließen (und ohne manuell auf einen anderen Änderungssatz aktualisieren zu müssen):
Hinweis: Der Alias nutzt die Tatsache, dass Mercurial-Aliase Shell-Befehle sein können . Dies bedeutet, dass dies wahrscheinlich nur unter UNIX funktioniert, nicht unter Windows.
quelle
Eine Alternative zum Schließen oder Entfernen des unerwünschten Zweigs besteht darin, ihn so zusammenzuführen , dass seine Auswirkungen vollständig verworfen werden, er jedoch in der Geschichte verbleibt. Dieser Ansatz ermöglicht es diesen unerwünschten Änderungen, sich in einem Push zu verbreiten. Verwenden Sie dies also nur, wenn dies der beabsichtigte Effekt ist.
Angenommen, der Änderungssatzverlauf sieht folgendermaßen aus:
und es ist
5
und6
welche nicht mehr gewollt sind.Du kannst das:
was wird dies schaffen:
Das Update
8
stellt sicher, dass Sie an der gewünschten Stelle im Verlauf arbeiten, die Sie behalten möchten.Das
-t :local
Programm weist hg an, das Zusammenführungs-Tool " local " zu verwenden, das es anweist , Änderungen aus dem anderen Zweig zu ignorieren, dh dem, der NICHT durch den aktuellen Status des Arbeitsordners dargestellt wird. Mehr Info .Somit bleiben die unerwünschten Änderungen in
5
und6
in der Geschichte erhalten, wirken sich aber nicht auf etwas Neueres aus.quelle
Dies ist ein Anwendungsfall für die Evolve-Erweiterung . Es ist derzeit nicht im Lieferumfang von Mercurial enthalten, daher handelt es sich technisch gesehen um eine Erweiterung eines Drittanbieters. Aber es wird ziemlich häufig von einer Reihe von Leuten genutzt, einschließlich Mercurial-Entwicklern, wird sehr aktiv entwickelt und geht nirgendwo hin.
Mit der Evolve-Erweiterung tun Sie dies einfach
und mach weiter mit deinem Leben. Das cset wird noch da sein, aber veraltet. Es ist nur sichtbar, wenn Sie die
--hidden
Option an Mercurial-Befehle übergeben, und wird standardmäßig nicht an Remote-Repositorys übertragen. Obwohl ich denke, Sie können es erzwingen, wenn Sie wirklich wollen.Wenn das Cset, das Sie beschneiden, Vorfahren hat, die Sie behalten möchten, müssen Sie ausgeführt werden, um
hg evolve
diese Änderungssätze neu zu starten.hg evolve
wird dies automatisch tun. Ansonsten müssen Sie nichts tun.quelle
Sie können Ihr beschädigtes Repo auf ein neues klonen, ohne diesen unerwünschten Kopf zu klonen. Entfernen Sie dann das alte Repository, verschieben Sie den neu erstellten Klon an den ursprünglichen Ort und arbeiten Sie weiter damit. Dies wird einige Zeit dauern, aber Sie erhalten ein perfekt sauberes Repository ohne Anzeichen dieser unerwünschten Überarbeitung.
quelle
Ich bin oft auf dieses Problem gestoßen, wenn ich einen Kopf enthaupten möchte, der irrtümlich erstellt wurde. Ich möchte immer sehen, wie es vom Erdboden verschwindet.
Holen Sie sich auf Ihrer lokalen Kopie die neueste und dann:
Suchen Sie den Anfang eines Kopfes, den Sie abstreifen möchten (wo sich ein neuer Hals abzweigt), und erhalten Sie die Revisionsnummer
Zieh es aus.
Quelle: TipsAndTricks .
Quelle: PruningDeadBranches # Using_strip .
Ihr Repo sollte jetzt den Kopf abgestreift haben. Der letzte Schritt ist wichtig, da beim Strippen keine Änderungen vorgenommen werden, die Sie in Ihr zentrales Repository übertragen können. Ohne den letzten Schritt haben Sie den Kopf nur lokal abgestreift.
quelle