2010-10-02 15 views
32

Sto lavorando a un progetto in cui ho un commit che ha introdotto una funzionalità con problemi importanti che non sono stati scoperti immediatamente. Ora voglio rimuovere completamente la revisione mantenendo il lavoro che la segue ma sto attraversando un periodo difficile che mi avvolge in questa unione a 3 vie. Ecco un grafico semplificato del mio progetto.Come funziona la fusione a 3 vie in Mercurial/Meld?

 
o changeset: 134:7f81764aa03a 
| tag:   tip 
| parent:  128:451d8a19edea 
| summary:  Backed out changeset 451d8a19edea 
| 
| @ changeset: 133:5eefa40e2a29 
| | summary:  (Change I need to keep keep) 
| | 
*snip 3 commits* 
| o changeset: 129:5f6182a97d40 
|/ summary:  (Change I need to keep keep) 
| 
o changeset: 128:451d8a19edea 
| summary:  (Change that introduced a major problem) 
| 
o changeset: 127:4f26dc55455d 
| summary:  (summary doesn't matter for this question) 

Se ho capito bene, R127 e R134 sono esattamente gli stessi. Quando eseguo hg up -C -r 133 e quindi eseguo hg merge, Meld si apre con tre forme di uno dei miei file: locale, base e altro. il locale sembra essere r133 ma sto attraversando un periodo difficile che mi avvolge attorno a cosa significhi "base" e "altro".

risposta

34

locale è R133

Altro è R134

Base è R128 (l'antenato comune ad entrambe le R133 e R 134)

Quando si esegue un modo 3 unirlo confronta tutti e tre quelli insieme per aiutarti a decidere cosa prendere e da dove. Vedendo quale cambiamento c'è nell'altra revisione e in che modo l'antenato comune sembrava essere in grado di prendere una decisione molto più informata su cosa tenere e cosa cambiare.

+0

Quindi lei sta dicendo che un sacco di esso sta per essere fusione manuale? – Pacerier

10

La tua domanda è davvero confusa, ma qui ci sono alcune informazioni che potrebbero aiutarti.

  • Che cos'è la base?

Base è la versione non modificata della revisione che si è attualmente verificata e utilizzata. dove probabilmente sono state biforcate altre modifiche (puoi avere delle revisioni tra il tuo attuale locale e base!). è proprio dove la revisione più vicina dove nessun altro fork ha deviato da dopo (stesso genitore) (nel tuo caso r128)

  • Che cos'è la testa?

Testa è l'ultima revisione nel controllo di versione. se lavori da solo su una sola copia probabilmente sarà di base. ma un collaboratore potrebbe aver modificato lo stesso file e averlo controllato in controllo di versione, quindi la testa è successiva alla tua base.

  • Che cos'è il locale?

locale è la vostra versione modificata (nel tuo caso R133)

  • ciò che è altro?

altro è il qualche forcella/ramo che ha anche la vostra base come genitore (nel tuo caso R134)

  • Come funziona 3-way lavoro unione?

L'unione a 3 vie funziona (almeno in combinazione) gerarchicamente.di solito da sinistra a destra in questo modo:

locale> di base> altro/testa

locale/di base è per lo più banali perché il suo proprio quello che si è modificato

quindi è possibile unire le modifiche nella revisione testa o quello del tuo collega o qualsiasi altra cosa.

Non ci può essere di più revisioni altra/testa, ma poi non è il tuo lavoro per unire e quindi più che a 3 vie confrontare non ha senso.

+12

La tua definizione di testa non è accurata per mercurial. L'ultima revisione in mercurial si chiama 'tip'. Un consiglio è sempre una testa ma una testa non è sempre un consiglio. In una fusione 'head' non è mai 'base' perché 'base è l'antenato più recente comune dei due changeset che vengono uniti. –

Problemi correlati