Come funziona il 3 vie unione in opera Mercurial / Meld?
-
27-09-2019 - |
Domanda
Sto lavorando su un progetto in cui ho un commit che ha introdotto una caratteristica con i maggiori problemi che non sono stati scoperti immediatamente. Ora voglio rimuovere completamente quella revisione, mantenendo il lavoro seguente, ma sto avendo un momento difficile confezionamento mia testa intorno a questo 3 vie di unione. Ecco un grafico semplificato del mio progetto.
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 ho hg up -C -r 133
e quindi eseguire hg merge
, Meld si apre con tre forme di uno dei miei file: locale, di base, e altri. locale sembra essere R133 ma sto avendo un momento difficile avvolgere la mia testa intorno a ciò che "base" e "altro" media.
Soluzione
Locale R133
Altro R134
Base è R128 (l'antenato comune a entrambi R133 e R 134)
Quando si esegue una stampa a 3 vie si confronta tutti e tre questi insieme per aiutarvi a decidere cosa prendere e da dove. Vedendo ciò che il cambiamento è l'altra di revisione e ciò che l'antenato comune sembrava si è in grado di prendere una decisione molto più informati su cosa tenere e cosa cambiare.
Altri suggerimenti
La tua domanda è davvero fonte di confusione, ma qui ci sono alcune informazioni che possono aiutare a.
- Qual è la base?
Base è la versione non modificata della revisione che si è attualmente estratto e lavorato. dove eventualmente altri cambiamenti hanno biforcuta off (si può avere revisioni tra il vostro attuale locale e di base!). il suo solo dove la revisione più vicino dove nessun altro forcella ha deviato dal dopo (stesso genitore) (nel tuo caso R128)
- Qual è il capo?
La testa è l'ultima revisione nel controllo della versione. se si lavora da soli su una sola copia probabilmente sarà di base. ma un lavoratore co potrebbe aver modificato lo stesso file e controllato in controllo di versione, quindi testa è oltre la vostra base.
- Qual è locale?
locale è la vostra versione modificata (nel tuo caso R133)
- ciò che è altro?
Altra è la certa forcella / ramo che ha anche la vostra base come genitore (nel tuo caso R134)
- Come funziona 3-way lavoro unione?
3 way merge funziona (almeno in fusione) gerarchicamente. di solito da sinistra a destra in questo modo:
locale> di base> altro / head
base / locale è in gran parte perché la sua banale proprio quello che è stato modificato
quindi è possibile unire le modifiche nella revisione testa o quella del vostro lavoratore co o qualsiasi altra cosa.
Non ci possono essere molteplici altre revisioni / testa, ma poi non è il vostro lavoro per unione in e quindi più di 3 vie confronto non ha senso.