338 Stimmen

Wie kann ich eine falsche Commit-Nachricht in Mercurial bearbeiten?

Ich verwende derzeit TortoiseHg (Mercurial) und habe versehentlich eine falsche Commit-Nachricht übertragen. Wie bearbeite ich diese Übergabemeldung im Projektarchiv?

19voto

knockNrod Punkte 363

Klicken Sie in TortoiseHg mit der rechten Maustaste auf die Revision, die Sie ändern möchten. Wählen Sie Historie modifizieren->MQ importieren. Dies wird alle Revisionen bis einschließlich der ausgewählten Revision von Mercurial Changesets in Mercurial Queue Patches umwandeln. Wählen Sie den Patch aus, für den Sie die Nachricht ändern möchten, und der Bildschirm sollte automatisch in den MQ-Editor wechseln. Bearbeiten Sie die Nachricht, die sich in der Mitte des Bildschirms befindet, und klicken Sie dann auf QRefresh. Klicken Sie abschließend mit der rechten Maustaste auf den Patch und wählen Sie Modify History->Finish Patch, wodurch er von einem Patch wieder in ein Change Set umgewandelt wird.

Oh, dies setzt voraus, dass MQ eine aktive Erweiterung für TortoiseHG auf diesem Repository ist. Wenn dies nicht der Fall ist, sollten Sie auf Datei->Einstellungen, auf Erweiterungen und auf das Kontrollkästchen mq klicken können. Sie sollten gewarnt werden, dass Sie TortoiseHg schließen müssen, bevor die Erweiterung aktiv wird, also schließen und wieder öffnen.

12voto

EDITAR: Wie von Anwendern angemerkt, verwenden Sie nicht MQ, sondern commit --amend . Diese Antwort ist heute vor allem von historischem Interesse.

Wie bereits von anderen erwähnt, ist die MQ-Erweiterung für diese Aufgabe viel besser geeignet, und Sie laufen nicht Gefahr, Ihre Arbeit zu zerstören. Um dies zu tun:

  1. Aktivieren Sie die MQ-Erweiterung, indem Sie etwas wie das Folgende in Ihre hgrc einfügen:

    [extensions]
    mq =
  2. Aktualisieren Sie auf den Änderungssatz, den Sie bearbeiten möchten, typischerweise Tipp:

    hg up $rev
  3. Importiert den aktuellen Änderungssatz in die Warteschlange:

    hg qimport -r .
  4. Aktualisieren Sie den Patch und bearbeiten Sie die Übergabemeldung:

    hg qrefresh -e
  5. Beenden Sie alle angewandten Patches (in diesem Fall einen) und speichern Sie sie als reguläre Changesets:

    hg qfinish -a

Ich bin mit TortoiseHg nicht vertraut, aber die Befehle sollten denen oben ähnlich sein. Ich glaube auch, dass es erwähnenswert ist, dass das Bearbeiten der Geschichte riskant ist; Sie sollten es nur tun, wenn Sie absolut sicher sein, dass der Änderungssatz nicht an einen anderen Ort verschoben oder von dort abgezogen wurde.

6voto

Anton N. Petrov Punkte 576

Rollback-and-reapply ist eine wirklich einfache Lösung, aber sie kann nur bei der letzten Übertragung helfen. Mercurial Queues ist eine viel mächtigere Sache (beachten Sie, dass Sie die Mercurial Queues Erweiterung aktivieren um "hg q*"-Befehle verwenden zu können).

1voto

jls Punkte 31

Ich habe es so gemacht. Erstens: Übertreiben Sie Ihre Änderungen nicht, sonst haben Sie Pech gehabt. Schnappen Sie sich das zusammenbrechen Erweiterung. Übertragen Sie einen weiteren Dummy-Änderungssatz. Verwenden Sie dann collapse, um die beiden vorherigen Änderungssätze zu einem zusammenzufassen. Sie werden nach einer neuen Commit-Nachricht gefragt, wobei Sie die Nachrichten, die Sie bereits haben, als Ausgangspunkt nehmen. Sie haben Ihre ursprüngliche Commit-Nachricht effektiv geändert.

1voto

Doru Chiulan Punkte 287

Einen Hack verwende ich, wenn die Revision, die ich bearbeiten möchte, noch nicht so alt ist:

Nehmen wir an, Sie sind bei Drehzahl 500 und wollen 497 bearbeiten.

hg export -o rev497 497
hg export -o rev498 498
hg export -o rev499 499
hg export -o rev500 500

Bearbeiten Sie die Datei rev497 und ändern Sie die Meldung. (Sie steht nach den ersten Zeilen, denen ein "#" vorangestellt ist)

hg import rev497
hg import rev498
hg import rev499
hg import rev500

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X