2014-02-20 11 views
8

Gibt es eine Möglichkeit, eine Commit-Nachricht in Mercurial bei einem Commit zu bearbeiten, nachdem andere Commits mit TortoiseHg aufgetreten sind? Ich habe diese Beiträge lesen:Edit Mercurial Frühere Commit-Nachricht - TortoiseHg

How to edit incorrect commit message in Mercurial?

Mercurial: how to amend the last commit?

und war in der Lage eine „reguläre“ Commit-Nachricht zu aktualisieren, wenn es die letzten auf einem Zweig begehen (mit TortoiseHg). Ich war jedoch nicht in der Lage herauszufinden, wie eine Commit-Nachricht zu bearbeiten ist, wenn andere Commits nach denen, die ich bearbeiten möchte, aufgetreten sind. Es bearbeitet immer das letzte Commit.

Basierend auf Ed Cottrells Kommentar habe ich einen Test gemacht, bei dem ich zwei Commits gemacht habe, ohne zum zentralen Repo zu gehen, und ich habe immer noch das gleiche Problem - nur die letzte Commit-Nachricht kann bearbeitet werden.

EDIT: Ich sollte klarstellen, dass ich suche, ein Changeset zu aktualisieren, das geschoben wurde.

+0

Haben Sie seit dem betreffenden Commit zu einem Remote-Repository gedrängt? –

+0

Ja, also habe ich die Phase geändert, bevor ich sie in MQ importiere. – sdoca

+0

Das ist ein anderes Problem; Versuchen Sie Commit-Nachrichten in Patches oder im Core-Repository zu ändern? –

Antwort

3

Solange die Änderung in Frage lokal ist und nirgends gedrängt wurde, ist es möglich.

Die Commit-Nachricht wird verwendet, um die global eindeutige Hash-ID zu berechnen, die für alle Repositorys verwendet wird, um festzustellen, ob sie bereits einen Changeset haben oder nicht. Wenn Sie die Commit-Nachricht ändern, ändern Sie die eindeutige Hash-ID und jedes Repo wird es als "neues" Changeset sehen. Alle anderen Repositories, die das alte Changeset hatten, werden versuchen, das neue zu bekommen und bitten, dass Sie es mit sich selbst verschmelzen .... Das ist keine gute Sache, also ist die kurze Antwort auf Ihre Frage "tue es nicht" .

Wenn Sie diese Änderung definitiv von allen anderen Repos löschen könnten, so dass nur die lokale Kopie übrig bleibt, könnten Sie im Wesentlichen in den Zustand "Entwurf" gelangen. Beachten Sie, dass wenn irgendein Repo den "alten" Änderungssatz hat, wird es eines Tages zum zentralen Repo gedrängt werden und das Chaos verursachen, das wir zu vermeiden versuchen.


Wenn die changeset noch lokal ist (zum Beispiel in draft Status) können Sie hg commit --amend verwenden, wenn es die Eltern des Arbeitsverzeichnisses ist.

Wenn es Änderungen danach gibt, würde ich und hg qimport alle Änderungen einschließlich und diejenige, wo Sie die Commit-Nachricht bearbeiten möchten. hg qpop -a und dann hg qpush, um zu dem Patch zu gelangen, der den Änderungssatz darstellt, den Sie bearbeiten möchten. Dann hg qrefresh -e und nehmen Sie Ihre Änderungen vor. Dann einfach hg qfin -a und du solltest gut gehen.

9

Histedit extension (im Lieferumfang von TortoiseHG enthalten) hat einen mess Befehl zum Ändern der Commit-Nachricht von historischen Changesets.

Leider wird dieser Befehl von der TortoiseHG-GUI nicht unterstützt, daher müssen Sie den Befehl über die Befehlszeile ausführen.

+0

Ich habe histedit in meinem TortoiseHg aktiviert. Wie greifen Sie über die Benutzeroberfläche darauf zu? – sdoca

+0

@sdoca - AFAICS, 'histedit' haben noch keine GUI –

+0

Hallo, ich habe diese Seite gefunden: http://i-proving.com/2011/01/20/TortoiseHG-How-to-rename-a-changeset/ welches zeigt, wie man histedit in Verbindung mit TortoiseHg benutzt. Es erstellt nur Zweige mit dem alten Commit. Ich denke, sobald du gedrängt hast, ist das Ändern des Kommentars einfach nicht machbar. – sdoca

3

Der Rat von Edward ist gut - wenn Sie Ihre Änderungen in ein anderes Repository verschoben haben, sollten Sie sie in Stein gemeißelt betrachten und die Commit-Nachricht oder einen anderen Aspekt nicht aktualisieren.

Wir arbeiten jedoch daran, dies in Mercurial zu ändern. Es gibt eine experimentelle Erweiterung, mit der Sie umfangreichere Verlaufsbearbeitung durchführen und diese Änderungen an andere Repositories weitergeben können.Es heißt Evolve Extension und es ermöglicht ein Verhalten, das teilweise im Kern von Mercurial und teilweise außerhalb des Kerns liegt.

Wenn entwickeln verwenden, können Sie den zweiten bis letzten

$ hg update .^ 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
$ hg commit --amend -m 'new commit message' 
1 new unstable changesets  
$ hg stabilize 
more:[5] old tip changeset 
atop:[6] new commit message 

Die Erweiterung dieser Nachricht wie Commit bearbeiten kann, ermöglicht Ihnen dies, solange die Differenzmengen in der Entwurfsphase sind zu tun. Um sie in der Entwurfsphase zu halten, nachdem sie irgendwo hingedrängt wurden, muss das Repository, das Sie drücken, als nicht veröffentlichtes Repository konfiguriert werden. Sie können mehr darüber in der Changeset Evolution Documentation lesen.

+0

Danke. Für meinen speziellen Fall möchte ich einen Kommentar in einem Commit aktualisieren, der leider mehr als der vorletzte ist. Aber ich habe in der Zwischenzeit ein paar Mercurial-Tricks gelernt. – sdoca