2012-12-27 5 views
5

Ich versuche, einige Änderungen, die ich auf meinem lokalen Computer vorgenommen habe, erneut zuzulassen. Ich erhalte die Fehlermeldung:Wie rebasen Sie ein unveränderbares Changeset mit Mercurial?

abort: can't rebase immutable changeset 110e73ed65a4 
(see hg help phases for details) 

Und ich bekomme den gleichen Fehler, auch nachdem ich die Phase auf den Differenzmengen zu ändern, die ich rebaseing (und die Phasenänderung scheint erfolgreich zu sein). Verwendung:

hg phase -f -d REV 

Ich frage mich, ob ein changeset in der Geschichte gibt es, dass ich fehle und ist immer noch unveränderlich, und wenn ja, ob es eine Möglichkeit ist, dass ich all die Changesets in einem changeset des ändern Geschichte mit einem einzigen Befehl veränderbar sein.

Oder gibt es eine Möglichkeit, Rebase zu erzwingen, sogar mit den unveränderlichen Changesets?

+0

Siehe http://www.selenic.com/mercurial/hg.1.html#revsets für die Angabe mehrerer Änderungssets, z. 'hg phase -f -d REVA :: REVB'. Beachten Sie, dass Mercurial, auch wenn Sie Phasen beliebig "forcen" können, verhindert, dass Sie jemals einen öffentlichen Änderungssatz haben, dessen Vorfahr geheim oder Entwurf ist. In jeder Situation, in der Sie 'hg phase -f -d REV' eingeben, müssen sowohl' REV' als auch * all seine Vorfahren * öffentlich sein, bevor Sie den Befehl eingegeben haben, und der Befehl ändert nur 'REV'. Auf der anderen Seite wird eine einzige 'hg Phase -f -d BASE_REV' auch alle Nachkommen beeinflussen, und' hg rebase' sollte funktionieren. – Ein

Antwort

5

Rebasing-Änderungen, die öffentlich sind, gilt als very bad idea. Sie sollten keinen Verlauf ändern, der verschoben wurde - der Punkt von phases ist zu verfolgen, welche Änderungen noch nicht gepusht wurden (damit sie geändert werden können) und welche Änderungen gepusht wurden (also unveränderlich sind)). Vom rebase documentation:

You should not rebase changesets that have already been shared with others. Doing so will force everybody else to perform the same rebase or they will end up with duplicated changesets after pulling in your rebased changesets.

Es ist besser, entweder in Ihren Änderungen zusammenführen oder graft sie in Graft (auch als Rosinenpickerei bekannt) hat einen oder mehr Änderungssätze und kopiert sie in Ihrem aktuellen Zweig..

+2

Meine Erfahrung ist, dass Changesets als unveränderlich angesehen werden können, ohne dass sie vorangetrieben wurden. Wenn Sie zwei lokale Maschinen haben, die Ihre Änderungen zwischen sich ziehen, können sie als "gedrängt" betrachtet werden, obwohl sie nicht – Arvid

+0

sind. Rebase unterstützt die Option '--keep'. Commits, die rebased sind, enthalten unterschiedliche Metadaten von Transplantat - sie zeigen sich unterschiedlich. – user2864740

Verwandte Themen