Como a 3 vias se fundem no Mercurial/MELD funciona?
-
27-09-2019 - |
Pergunta
Estou trabalhando em um projeto em que tenho uma confirmação que introduziu um recurso com grandes problemas que não foram descobertos imediatamente. Agora, quero remover completamente essa revisão, mantendo o trabalho seguindo -o, mas estou tendo dificuldade em envolver minha cabeça por essa fusão de três vias. Aqui está um gráfico simplificado do meu projeto.
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 eu entendo isso corretamente, R127 e R134 são exatamente iguais. Quando eu hg up -C -r 133
e depois corra hg merge
, Meld aparece com três formas de um dos meus arquivos: local, base e outros. O local parece ser R133, mas estou tendo dificuldade em entender o que "base" e "outro" significam.
Solução
Local é R133
Outro é R134
Base é R128 (o ancestral comum para R133 e R 134)
Quando você realiza uma mesclagem de 3 vias, ele compara os três juntos para ajudá -lo a decidir o que levar e de onde. Ao ver o que é a mudança na outra revisão e o que o ancestral comum parecia ser capaz de tomar uma decisão muito mais informada sobre o que manter e o que mudar.
Outras dicas
Sua pergunta é realmente confusa, mas aqui estão algumas informações que podem ajudá -lo.
- O que é base?
A base é a versão não modificada da revisão que você fez o check -out e trabalhou. onde possivelmente outras mudanças se afastaram (você pode ter revisões entre o local atual e a base!). É exatamente onde a revisão mais próxima, onde nenhum outro garfo desviou depois (o mesmo pai) (no seu caso R128)
- O que é a cabeça?
Head é a revisão mais recente no controle de versão. Se você trabalha sozinho em apenas uma cópia, provavelmente será base. Mas um trabalhador de CO pode ter modificado o mesmo arquivo e verificado no controle da versão, a cabeça é posterior à sua base.
- O que é local?
Local é a sua versão modificada (no seu caso R133)
- O que é o outro?
Outros são alguns fork/ramo que também possui sua base como pai (no seu caso R134)
- Como funciona a mesclagem de três vias?
A mesclagem de 3 vias funciona (pelo menos em MELD) hierarquicamente. geralmente da esquerda para a direita assim:
Local> Base> Outra / Cabeça
Local/base é principalmente trivial porque é exatamente o que você modificou
Em seguida, você pode mesclar suas mudanças na revisão da cabeça ou a de seu funcionário ou qualquer outra coisa.
Pode haver várias outras revisões de cabeça/cabeça, mas não é seu trabalho se fundir e, portanto, mais de 3 vias comparar não faz sentido.