Bearbeiten Mercurial Frühere Commit-Nachricht - TortoiseHg

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 Posts gelesen:

Wie wird eine falsche Commit-Nachricht in Mercurial bearbeitet?

Mercurial: Wie ändert man den letzten Commit?

und konnten eine "reguläre" Commit-Nachricht aktualisieren, wenn es sich um das letzte Commit auf einer Verzweigung handelt (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.

BEARBEITEN: Ich sollte klarstellen, dass ich ein Changeset aktualisieren möchte, das verschoben wurde.

    
sdoca 20.02.2014, 16:50
quelle

3 Antworten

9

Die Histedit-Erweiterung (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.

    
Lazy Badger 20.02.2014 21:00
quelle
3

Solange die fragliche Änderung 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 Änderungssatz haben oder nicht. Wenn Sie die Commit-Nachricht ändern, ändern Sie die eindeutige Hash-ID und jeder Repo sieht sie als "neuen" Changeset. Alle anderen Repositorys, die den alten Changeset hatten, versuchen, den neuen zu erhalten und zu fragen dass du es mit sich selbst verschmelzen lässt .... Das ist keine gute Sache, also lautet die kurze Antwort auf deine Frage "mach es nicht".

Wenn Sie diese Änderung definitiv von allen anderen Repos löschen können, so dass nur die lokale Kopie übrig bleibt, könnten Sie im Wesentlichen in den Zustand "Entwurf" gelangen. Beachten Sie, dass, wenn any Repo die "alte" Änderungsmenge hat, sie irgendwann zum zentralen Repo verschoben wird und das Chaos verursacht, das wir vermeiden wollen.

Wenn der Änderungssatz noch lokal ist (z. B. in draft status), können Sie hg commit --amend verwenden. wenn es das übergeordnete Verzeichnis des Arbeitsverzeichnisses ist.

Wenn es Änderungen danach gibt, würde ich mq und hg qimport alle Änderungen bis einschließlich derjenigen, wo Sie die Commit-Nachricht bearbeiten wollen, verwenden. 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 nur hg qfin -a und du solltest gut gehen.

    
Edward 20.02.2014 20:40
quelle
3

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

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

Wenn Sie evolve verwenden, können Sie die vorletzte Commit-Nachricht wie folgt bearbeiten

%Vor%

Die Erweiterung ermöglicht dies, solange sich die Changesets in der Entwurfsphase befinden. Um sie in der Entwurfsphase zu halten, nachdem sie irgendwo hingedrängt wurden, muss das Repository, zu dem Sie wechseln, als non-publishing -Repository konfiguriert werden. Sie können mehr darüber in der Änderungssatz-Entwicklungsdokumentation nachlesen.

    
Martin Geisler 21.02.2014 09:32
quelle