2012-12-27 10 views
5

Sto cercando di ribaltare alcune modifiche che ho inserito nella mia macchina locale. Sto ottenendo l'errore:Come rebase un changeset immutabile con Mercurial?

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

E io ottenere lo stesso errore anche dopo che ho cambiato la fase sui gruppi di modifiche che sto rebaseing (e il cambiamento di fase sembra avere successo). utilizzando:

hg phase -f -d REV 

Mi chiedo se c'è un insieme di modifiche nella storia che mi manca ed è ancora immutabile, e in caso affermativo, se c'è un modo che io possa cambiare tutti i changeset in un insieme di modifiche di la storia deve essere mutabile con un singolo comando.

Oppure, c'è un modo per forzare rebase, anche con i changeset immutabili?

+0

Vedere http://www.selenic.com/mercurial/hg.1.html#revsets su come specificare più changeset, ad es. 'hg phase -f -d REVA :: REVB'. Nota che anche se puoi '--force' le fasi che ti piacciono, Mercurial ti impedisce di avere un changeset pubblico il cui antenato è segreto o draft. Quindi, in ogni situazione in cui si digita 'hg phase -f -d REV', allora sia REV che * tutti i suoi antenati * devono essere pubblici prima di inserire il comando, e il comando cambia solo' REV'. D'altra parte, una singola fase 'hg -f -d BASE_REV' influenzerà anche tutti i discendenti, e' hg rebase' dovrebbe funzionare. – Ein

risposta

5

Le modifiche di rebasing che sono pubbliche sono considerate very bad idea. Non è necessario modificare alcuna cronologia che è stata inserita: il punto di phases è quello di tracciare quali modifiche non sono state ancora inserite (in modo che possano essere modificate) e quali modifiche siano state inserite (quindi sono immutabili). Dal 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.

E 'meglio o fondersi nei vostri cambiamenti o li graft a Graft (noto anche come cherry-picking) batte uno o più gruppi di modifiche e li copia al vostro ramo corrente..

+2

la mia esperienza è che i changeset possono essere considerati immutabili senza essere stati spinti. se hai due macchine locali che tirano le tue modifiche tra loro, possono essere considerate "spinte", anche se non lo sono. – Arvid

+0

Rebase supporta l'opzione '--keep'. I commit rebased come questo contengono metadati diversi dall'innesto: si presentano in modo diverso. – user2864740