2010-03-01 13 views

risposta

4

No, i nomi dei rami fanno parte del changeset (è davvero come un'etichetta che si aggiunge al commit), significa che l'hash del changeset dipende dal nome del ramo.

Quindi l'unico modo per cambiarlo in modo retroattivo è riscrivendo la cronologia (che non funziona bene se hai spostato le tue modifiche altrove, dal momento che dovrai riscrivere ogni repository che contiene le modifiche).

Per riscrivere la cronologia, è possibile utilizzare ad esempio mq.

0

Non una soluzione completa ma, senza riscrittura della cronologia; puoi taggare l'ultima serie di modifiche nel ramo senza nome. Se non si ricomincia da questo il tag dovrebbe surfice. Se hai bisogno di riarrangiarti, puoi passare a un ramo nominato dopo il changeset con tag.

14

Volevo solo farlo, ed ecco la soluzione che ho trovato. È passato un anno da quando la domanda è stata posta originariamente, questo potrebbe spiegare perché ora posso trovare una soluzione. Ha lo svantaggio di creare una revisione extra nel processo, ma non è stato male per me.

Per prima cosa, si torna al punto in cui si desidera creare il ramo. Nel mio caso, in realtà volevo iniziare una nuova radice (perché non ero molto sensibile quando ho avviato il repository, ma comunque), quindi sto aggiornando su null. Probabilmente vuoi iniziare da qualche altra parte, dipende dalla tua situazione.

$ hg update null 

Quindi, creare il ramo.

$ hg branch blah 
$ hg commit -m "Created blah branch." 

Poi, abbiamo REBASE tutti i commit che abbiamo fatto sul nostro nuovo ramo:

$ hg rebase -s SOURCE -d DEST 

Il SOURCE qui dovrebbe essere il primo commit hai fatto nei commit si desidera creare il ramo da, e il DEST dovrebbe essere il commit in cui è stato creato il ramo (quello che abbiamo commesso sopra).

+1

Grazie, ha funzionato perfettamente. Questa dovrebbe essere la risposta accettata. –

+1

Funziona (penso), ma ha il potenziale problema che non funzioni bene se hai condiviso il tuo repository con chiunque (come note @tonfa indirettamente). Come note [rebase extension] (http://mercurial.selenic.com/wiki/RebaseExtension), _Non dovresti rifare i changeset che sono già stati condivisi con altri. Fare così costringerà tutti gli altri a eseguire lo stesso rebase_ –

+0

Per coloro che lavorano in mercurial hg, è necessario abilitare l'estensione di rebase in Impostazioni. – amaidment

Problemi correlati