Ich habe ein paar Commits, die eigentlich nur eines sein sollten. Wenn ich Git verwenden würde, würde ich verwenden:
git rebase -i <some-commit-before>
und dann zerquetsche sie.
Kann ich das in mercurial machen? Wenn das so ist, wie?
Ja, Sie können dies mit mercurial ohne Erweiterungen tun, indem Sie Changesets verketten .
Wenn Sie eine Erweiterung verwenden möchten, können Sie alternativ Folgendes verwenden:
Mein Favorit ist
hg strip --keep
Befehl. Und dann begebe ich alle Änderungen in einem Commit.Es ist der schnellste und bequemste Weg für mich, weil ich während meiner täglichen Arbeit gerne viele kleine Aufgaben mache;)
Hinweis 1: Zum
strip
Aktivieren ist eine integrierte Erweiterung erforderlichmq
.Hinweis 2: Mein Lieblings-Git / Mercurial-Client (SmartGit / Hg) wird während standardmäßig an einen
--keep
Parameter angehängtstrip
. Und was noch bequemer ist: Es bietet eine Option namensjoin commits
:]quelle
hg strip --keep --rev [rev]
Worev
ist die Revisionsnummer des ersten Commits, das Sie mit dem letzten--rev
ist optional, voller Befehl isthg strip --keep [rev]
hg help strip
gibthg strip [-k] [-f] [-n] [-B bookmark] [-r] REV...
, und das Weglassen der Überarbeitung gibt mirabort: empty revision set
.hg strip
ist nicht die beste Idee. Es ist nicht gerade sicher. Versuchen Sie eshg histedit
, vielleicht sogar mit der Evolve-Erweiterung.Die Rebase-Erweiterung wirkte wie ein Zauber. So quetschen Sie 2 Commits:
Punkt ist eine Verknüpfung für die aktuelle Revision.
Es ist noch einfacher, wenn Sie ein paar Commits für einen Zweig haben und sie alle zu einem zusammenfassen möchten:
So funktioniert das:
(von http://mercurial-scm.org/wiki/RebaseExtension#Collapsing )
quelle
evolve
ist eine Erweiterung von mercurial, die uns dabei hilft, eine sichere veränderbare Geschichte zu haben. Es ist jedoch immer noch experimentell. Sie können es verwenden, indem Sie es aus dem Repo klonen und wie folgt in Ihre .hgrc-Datei einfügen.Angenommen, Sie haben das Evolutions-Repo in Ihrem Home-Verzeichnis geklont. Jetzt können Sie loslegen. Sie können auch Hilfe von suchen
hg help fold
.Befehl falten
Sie weisen
fold
an, eine lineare Kette von Commits zu quetschen / zu falten, die nicht unterbrochen ist. Falz erstellt ein neues Änderungsset, das Änderungen aus allen Änderungssätzen enthält, und markiert alle diese Commits als veraltet. Sie können dies unter docs genauer untersuchen .Angenommen, Sie haben die folgende Geschichte.
Sie wollen quetschen
e
,f
undg
. Du kannst tunDas Ergebnis wird sein
Wo
h
ist das Änderungsset, das Änderungen aus allen drei Commits enthälte
,f
undg
.Sie können auch Änderungssätze aus der Mitte des Verlaufs falten, dh Sie müssen nicht unbedingt eine Kette auswählen, die die Spitze enthält. Angenommen , Sie falten möchten
b
,c
undd
. Du kannst tunDies führt zu
wobei
i
die gefaltete changeset vonb
,c
,d
undj
ist der gleiche wie changeseth
. Evolve Benutzerhandbuch ist ein Muss zu lesen.quelle
--keep
Option zum erneuten Basieren deckt dies jedoch ab (gefolgt vom Markieren von Revisionen als geheim oder dem Verwenden von Streifen, sobald Sie das Ergebnis überprüft haben). Selbst das Verschieben von Revisionen zwischen anderen Revisionen ist mit einer Folge von zwei Rebase-Befehlen möglich.Mit Mercurial 4.8 (November 2018, 9 Jahre später) konnten Sie den neuen Befehl in Betracht ziehen
hg absorb
(es war zuvor eine experimentelle Funktion ).Siehe " Absorbieren von Commit-Änderungen in Mercurial 4.8 "
quelle
Ich denke
chistedit
(eingebaut seit Mercurial 2.3) ist demrebase -i
reinen Mercurial am nächsten (chistedit
ist die interaktive Version vonhistedit
). Sobald derfold
Befehl in histedit vorliegt, wird er den Rebasessquash
und derroll
Befehl den Rebases zugeordnetfixup
. Siehe histedit Dokumenten.Hier ist ein einfaches Beispiel. Angenommen, Sie haben Folgendes und möchten alle Änderungen von 1e21c4b1 in die vorherige Revision verschieben und nur die Nachricht der vorherigen Revision beibehalten.
Sie können
hg chistedit -r b4a738a4
den Verlauf zurück zu b4a738a4 bearbeiten. In chistedit bewegen Sie sich dann auf 1e21c4b1 und drücken,r
um anzuzeigen, dass Sie diese Revision rollen möchten. Beachten Sie, dass die Reihenfolge in histedit (älteste bis neueste) vonhg log
(neueste bis älteste) umgekehrt ist .Nachdem Sie Ihre Änderungen ausgewählt haben, wählen Sie
c
legen Sie sie fest. Das Ergebnis ist folgendes:@ bfa4a3be drees tipp | Ein Commit o 788aa028 drees | Älteres Zeug
Wenn Sie für sie relativ neu sind,
histedit
kann eine bessere Wahl sein alschistedit
weil die Befehlsbeschreibungen in der histedit-Datei als Referenz bereitgestellt werden. Es dauert nur ein bisschen mehr Bearbeitung, um die Befehle mit normaler Textbearbeitung festzulegen (genau wie bei normaler Rebase).Beachten Sie , verwenden entweder
histedit
oderchistedit
müssen Sie hinzufügen ,histedit
um Ihre Erweiterungen in Ihrer ~ / .hgrc:Ich schlug vor,
chistedit
da es am nächsten istrebase -i
und überall in der Geschichte funktioniert. Wenn Sie wirklich nur die aktuelle Version in die vorherige überarbeiten / optimieren möchten, dann @G. Demeckisstrip
Vorschlag kann gut sein, da klar ist, was passiert. Es ist seit Mercuria 2.8 eingebaut. Um die oben genannten äquivalenten Ergebnisse zu erhalten, können Sie Folgendes tun:Beachten Sie
strip
, dass wie bei histedit in Ihrem ~ / .hgrc Folgendes aktiviert sein muss:quelle
Nehmen wir an, Sie möchten 2 der letzten Commits quetschen (vereinen).
Suchen Sie eine Revisionsnummer
mögliche Ausgabe:
Soft-Reset-Zweig
Änderungen erneut festschreiben
Anmerkungen
strip
erfordert die Aktivierung einer integrierten Erweiterung. Erstellen / Bearbeiten der~/.hgrc
Konfigurationsdatei mit folgendem Inhalt:quelle
Ich benutze:
quelle