text: Ich suche in Mercurial nach einem Gegenstück von git commit --amend, d. H. Nach einer Möglichkeit, das Commit zu ändern, mit dem meine Arbeitskopie verknüpft ist. Die Voraussetzungen für dieses Änderungsverfahren sind:
  wenn möglich, sollte es keine Erweiterungen erfordern. Es muss keine nicht standardmäßigen Erweiterungen erfordern Erweiterungen, die nicht mit einer offiziellen Mercurial-Installation geliefert werden.
  wenn das Commit zum Ändern ein Leiter meiner aktuellen Niederlassung ist, sollte kein neuer Leiter erstellt werden. Wenn das Commit nicht head ist, kann ein neuer head erstellt werden.
  die Prozedur sollte safe so sein, dass, wenn aus irgendeinem Grund die Änderung fehlschlägt, ich die gleiche Arbeitskopie und denselben Repository-Status wie vor der Änderung wiederherstellen möchte. Mit anderen Worten, wenn die Änderung selbst fehlschlagen kann, sollte eine fehlersichere Prozedur zum Wiederherstellen der Arbeitskopie und des Repository-Status vorhanden sein. Ich beziehe mich auf "Fehler", die in der Natur der Änderungsprozedur liegen (wie z. B. Konflikte), nicht auf Dateisystemprobleme (wie Zugriffsbeschränkungen, nicht in der Lage, eine Datei zum Schreiben zu sperren, ... )
  Update (1):
  die Prozedur muss automatisierbar sein, damit sie von einem GUI-Client ausgeführt werden kann, ohne dass eine Benutzerinteraktion erforderlich ist.
  Update (2):
  dateien im Arbeitsverzeichnis dürfen nicht berührt werden (bestimmte modifizierte Dateien enthalten möglicherweise Dateisystemsperren). Dies bedeutet insbesondere, dass ein möglicher Ansatz zu keinem Zeitpunkt ein sauberes Arbeitsverzeichnis erfordert.
  mercurialcommitamendmercurial-commit
  201
  18.11.2011 mstrap
  Mit der Veröffentlichung von Mercurial 2.2 können Sie die Option --amend zusammen mit hg commit verwenden, um das letzte Commit mit dem aktuellen Arbeitsverzeichnis zu aktualisieren
  Aus der Befehlszeilenreferenz :
  Das Flag --amend kann verwendet werden, um das übergeordnete Element des Arbeitsverzeichnisses durch ein neues Commit zu ändern, das die Änderungen im übergeordneten Element zusätzlich zu den derzeit vom Status hg gemeldeten Änderungen enthält, sofern vorhanden. Das alte Commit wird in einem Backup-Bundle in .hg/strip-backup gespeichert (siehe hg help bundle und hg help, wie es wiederhergestellt werden kann).
  Nachricht, Benutzer und Datum stammen aus dem geänderten Commit, sofern nicht anders angegeben. Wenn in der Befehlszeile keine Nachricht angegeben ist, wird der Editor mit der Nachricht des geänderten Commits geöffnet.
  Das Tolle ist, dass dieser Mechanismus "sicher" ist, weil er auf der relativ neuen "Phasen" -Funktion beruht, um Updates zu verhindern, die den Verlauf ändern würden, der bereits außerhalb des lokalen Repositorys verfügbar gemacht wurde.
  276
  02.05.2012 Chris Phillips
  Sie haben 3 Möglichkeiten, Commits in Mercurial zu bearbeiten:
  hg strip --keep --rev -1 macht das letzte (1) Commit (s) rückgängig, sodass Sie es erneut tun können (siehe diese Antwort für weitere Informationen).
  Verwendung der MQ-Erweiterung , die mit Mercurial geliefert wird
  Auch wenn es nicht mit Mercurial ausgeliefert wird, ist die Erweiterung Histedit erwähnenswert
  Sie können auch die Seite Bearbeitungshistorie des Mercurial-Wikis einsehen.
  Kurz gesagt, das Editieren von Historien ist sehr schwierig und entmutigt. Wenn Sie Ihre Änderungen bereits durchgesetzt haben, können Sie kaum etwas tun, außer wenn Sie die vollständige Kontrolle über alle anderen Klone haben.
  Ich bin mit dem git commit --amend-Befehl nicht wirklich vertraut, aber AFAIK, Histedit scheint die engste Annäherung zu sein, wird aber leider nicht mit Mercurial ausgeliefert. MQ ist wirklich kompliziert zu bedienen, aber Sie können damit fast alles machen.
  51
  18.11.2011 krtek
  GUI-Äquivalent für hg commit --amend:
  Dies funktioniert auch von TortoiseHGs GUI (ich verwende Version 2.5):
  Wechseln Sie in die Ansicht 'Festschreiben' oder wählen Sie in der Workbench-Ansicht den Eintrag 'Arbeitsverzeichnis' aus. Die Schaltfläche 'Übernehmen' hat die Option 'Aktuelle Revision ändern' (klicken Sie auf den Dropdown-Pfeil der Schaltfläche, um sie zu finden ).
            ||
            ||
            \/
  Caveat-Emptor:
  Diese zusätzliche Option wird nur aktiviert, wenn die Mercurial-Version mindestens .__ ist. 2.2.0, und wenn die aktuelle Version nicht öffentlich ist, ist es kein Patch und hat keine Kinder. [...]
  Durch Klicken auf die Schaltfläche wird .__ aufgerufen. 'Commit --amend' die Revision überarbeiten '.
  Mehr Infos dazu auf dem THG-Entwickler-Kanal
  37
  04.01.2013 Cristi Diaconescu
  Angenommen, Sie haben Ihre Änderungen noch nicht übernommen, können Sie Folgendes tun.
  Fügen Sie Ihrer .hgrc hinzu:
  [extensions]
  mq =
  In Ihrem Repository:
  hg qimport -r0:tip
  hg qpop -a
  Natürlich müssen Sie nicht mit der Revision 0 beginnen oder alle Patches installieren, denn die letzte Version (hg qpop) reicht aus (siehe unten).
  entfernen Sie den letzten Eintrag in der Datei .hg/patches/series oder die Patches, die Ihnen nicht gefallen. Nachbestellungen sind ebenfalls möglich.
  hg qpush -a; hg qfinish -a
  entfernen Sie die .diff-Dateien (nicht angewendete Patches), die sich noch in .hg/patches befinden (sollte in Ihrem Fall eine sein).
  Wenn Sie Ihren Patch nicht möchtenalle zurücknehmen, können Sie ihn mit hg qimport -r0:tip (oder ähnlichem) bearbeiten, dann bearbeiten und hg qrefresh verwenden, um die Änderungen zusammenzuführen in den obersten Patch auf Ihrem Stapel. Lesen Sie hg help qrefresh.
  Durch Bearbeiten von .hg/patches/series können Sie sogar mehrere Patches entfernen oder einige neu anordnen. Wenn Ihre letzte Revision 99 ist, können Sie einfach hg qimport -r98:tip; hg qpop; [edit series file]; hg qpush -a; hg qfinish -a verwenden.
  Natürlich ist dieses Verfahren sehr entmutigt und riskant. Backup erstellen von allem, bevor Sie dies tun!
  Als Randnotiz habe ich es zig-mal in privaten Repositories gemacht.
  7
  18.11.2011 hochl
  Ich stelle mich ein, was krtek geschrieben hat. Genauer gesagt Lösung 1:
  Annahmen:
  sie haben ein (!) Changeset festgelegt, aber noch nicht verschoben
  sie möchten dieses Änderungsset ändern (z. B. Dateien hinzufügen, entfernen oder ändern und/oder die Festschreibungsnachricht).
  Lösung:
  verwenden Sie hg rollback, um den letzten Commit rückgängig zu machen
  mit den neuen Änderungen erneut festlegen
  Der Rollback macht den letzten Vorgang wirklich rückgängig. Seine Arbeitsweise ist ziemlich einfach: Normaler Betrieb in HG hängt nur an Dateien an; Dies beinhaltet ein Commit. Mercurial verfolgt die Dateilängen der letzten Transaktion und kann daher einen Schritt vollständig rückgängig machen, indem die Dateien auf ihre alten Längen zurückgeschnitten werden.
  7
  18.11.2011 Lucero
  Neuere Versionen von Mercurial enthalten die Erweiterung evolve, die den Befehl hg amend bereitstellt. Dies ermöglicht das Ändern eines Commits, ohne den Verlauf vor dem Ändern in Ihrer Versionskontrolle zu verlieren.
  hg ändern [OPTION] ... [DATEI] ...
  aliase: Aktualisieren
  kombinieren Sie ein Changeset mit Updates und ersetzen Sie es durch ein neues
  Commits a new changeset incorporating both the changes to the given files
  and all the changes from the current parent changeset into the repository.
  
  See 'hg commit' for details about committing changes.
  
  If you don't specify -m, the parent's message will be reused.
  
  Behind the scenes, Mercurial first commits the update as a regular child
  of the current parent. Then it creates a new commit on the parent's
  parents with the updated contents. Then it changes the working copy parent
  to this new combined changeset. Finally, the old changeset and its update
  are hidden from 'hg log' (unless you use --hidden with log).
  Unter https://www.Mercurial-scm.org/doc/evolution/user-guide.html#example-3-amend-a-changeset-with-evolve finden Sie eine vollständige Beschreibung der Erweiterung evolve.
  0
  06.03.2018 Karl Bartel
  Könnte nicht alle Probleme in der ursprünglichen Frage lösen, aber da dies de facto der Beitrag zu sein scheint, wie Mercurial das vorherige Commit ändern kann, füge ich meine 2-Cent-Informationen hinzu.
  Wenn Sie wie ich sind und nur die vorherige Festschreibungsmeldung ändern möchten (Tippfehler beheben usw.), ohne Dateien hinzuzufügen, funktioniert dies
  hg commit -X 'glob:**' --amend
  Ohne Einschluss- oder Ausschlussmuster schließt hg commit standardmäßig alle Dateien im Arbeitsverzeichnis ein. Durch das Anwenden des Musters -X 'glob:**' werden alle möglichen Dateien ausgeschlossen, sodass nur die Commit-Nachricht geändert werden kann.
  Funktionell ist es dasselbe wie git commit --amend, wenn sich keine Dateien in index/stage befinden.
  0
  03.07.2019 kaskelotti
  Wie gehe ich aus? VIM wenn Sie ein Mercurial-Commit in der Befehlszeile ausführen?
  src refspec master stimmt mit keinem überein, wenn Commits in git gedrückt werden
  Ändern der Git-Commit-Nachricht nach Push (vorausgesetzt, dass niemand von der Fernbedienung gezogen hat)
  git füge nur geänderte Änderungen hinzu und ignoriere nicht aufgespürte Dateien
  Git-Fehler beim Festschreiben nach dem Zusammenführen - fatal: Ein teilweises Festschreiben während einer Zusammenführung ist nicht möglich
  Bearbeiten der Git-Commit-Nachricht in GitHub
  2 Zweige in GIT zusammenführen
  Push schafft neue Remote-Köpfe! (Hast du vergessen zu verschmelzen? Mit Push -f for force)
  git: Aktualisierungen wurden abgelehnt, da die Remote-Datei Arbeit enthält, die Sie nicht lokal haben
  Siehe "echtes" Commit-Datum in github (Stunde/Tag)
  Installieren Sie ein spezifisches Git-Commit mit Pip
  Änderungen aufgeben, ohne aus der Historie zu löschen
  Ignorieren von ipython notebook checkpoints an beliebiger Stelle im Repository
  Mercurial-Ordner in ein Git-Repository konvertieren
  hg strip vs hg backout und hg rückgängig machen
  Umbenannte Datei, jetzt SVN, die mich nicht zulässt
  Github-Commit-Syntax zum Verknüpfen einer Pull-Anfrage/Ausgabe
  Aktuellen Mercurial-Revisions-Hash drucken?
  Entfernen Sie eine Datei aus der Liste, die festgeschrieben werden soll
  Mercurial - alle Dateien, die sich in einem Changeset geändert haben?
  Content dated before 2011-04-08 (UTC) is licensed under CC BY-SA 2.5. Content dated from 2011-04-08 up to but not including 2018-05-02 (UTC) is licensed under CC BY-SA 3.0. Content dated on or after 2018-05-02 (UTC) is licensed under CC BY-SA 4.0. | Privacy