2011-01-09 8 views
2

In meinem Setup habe ich eine zentrale HG-Repo, auf die ich meine lokalen Änderungen dränge. Sprich in meinem lokalen Klon habe ich eine Reihe von lokalen Commits und dann möchte ich die Änderungen in den zentralen Repo schieben. Wie kann ich nur den Endzustand pushen, ohne all die "kleinen" lokalen Commits einzubeziehen, die ich gemacht habe?Mercurial commit nur Tipp

Ich möchte das, weil ich manchmal nicht die Geschichte des zentralen Repo mit all den kleinen lokalen Commits verschmutzen möchte, die ich gemacht habe.

+4

Mercurial ermutigt, was Sie vermeiden möchten. Lass das Werkzeug seine Arbeit machen. – Apalala

Antwort

6

Warum möchten Sie das tun? Kleine Änderungen können leicht rückgängig gemacht werden. Wenn Sie alles in einem großen Commit sammeln, ist es vielleicht nicht so einfach, eine kleine Änderung rückgängig zu machen.

0

Es ist möglich, Ihren Verlauf mit der Erweiterung mq neu zu schreiben. Angenommen, die Revisionen, die Sie reduzieren möchten, sind revs, 5,6,7, wobei 7 die Spitze ist. Sie würden erreichen dies durch:

# Import the revs you want to collapse into mq 
# mq will create patches for each revision from 5:tip, with the name 
# <local rev number>.diff 
hg qimport -r5:tip 
# Goto the first commit 
hg qgoto 5.diff 
# Fold in the other commits successively. Aside from shell magic, there is 
# no command line way to specify multiple patches at once. 
hg qfold 6.diff 
hg qfold 7.diff 
# Commit the new mq patch as a changeset of its own 
hg qfinish 5.diff 

Nun Repository enthält nur eine U 5 mit dem Inhalt von dem, was vorher Revisionen 5, 6 und 7.

2

Ich stimme mit bjorn (und ich bin seine Antwort zu verbessern), was Sie tun, ist keine gute Idee - sinnvolle Geschichte ist eine gute Sache. Wenn Sie nicht davon gesprochen werden können, dann versuchen Sie nicht nur den letzten Änderungssatz, sondern einen neuen Änderungssatz, der eine Kombination all dieser Änderungsmengen darstellt. Der einfachste Weg, dies zu tun, ist die Verwendung der Collapse-Erweiterung, obwohl mq oder sogar Export/Import es tun kann. Der Schlüssel besteht darin, dass Sie mehrere Changesets in einen zusammenfassen, den Sie neu schreiben, und Sie werden Ihre vorhandenen Changesets entfernen und durch diese neuen kombinierten Changesets ersetzen. Dies verletzt die Unveränderlichkeit der Geschichte, die Mercurial so vertrauenswürdig macht.

1

Wie dies ohne Erweiterungen funktioniert, wird in der Merkurwiki-Seite ConcatenatingChangesets erklärt.

Diese Seite verweist auch auf einige alternative Ansätze mit hg-Erweiterungen, wie die CollapseExtension.