Na página de manual do git-merge, há várias estratégias de mesclagem que você pode usar.
resolver - Isso pode resolver apenas duas cabeças (ou seja, a ramificação atual e outra ramificada da qual você retirou) usando o algoritmo de mesclagem de 3 vias. Ele tenta detectar cuidadosamente ambiguidades cruzadas de mesclagem e é considerado geralmente seguro e rápido.
recursivo - Isso pode resolver apenas duas cabeças usando o algoritmo de mesclagem de 3 vias. Quando há mais de um ancestral comum que pode ser usado para mesclagem de 3 vias, ele cria uma árvore mesclada dos ancestrais comuns e a usa como a árvore de referência para a mesclagem de 3 vias. Foi relatado que isso resulta em menos conflitos de mesclagem sem causar fusões incorretas por testes feitos em confirmações de mesclagem reais retiradas do histórico de desenvolvimento do kernel Linux 2.6. Além disso, isso pode detectar e manipular fusões envolvendo renomeações. Essa é a estratégia de mesclagem padrão ao extrair ou mesclar uma ramificação.
polvo - Isso resolve mais de dois casos, mas se recusa a fazer mesclagens complexas que precisam de resolução manual. Destina-se principalmente a ser usado para agrupar cabeças de ramificação de tópicos. Essa é a estratégia de mesclagem padrão ao extrair ou mesclar mais de uma ramificação.
our - Isso resolve qualquer número de cabeças, mas o resultado da mesclagem é sempre a cabeça de ramificação atual. Ele deve ser usado para substituir o histórico antigo de desenvolvimento de ramificações laterais.
subárvore - Esta é uma estratégia recursiva modificada. Ao mesclar as árvores A e B, se B corresponder a uma subárvore de A, B será ajustado primeiro para corresponder à estrutura de árvore de A, em vez de ler as árvores no mesmo nível. Esse ajuste também é feito na árvore ancestral comum.
Quando devo especificar algo diferente do padrão? Quais são os melhores cenários?
git merge A B ...
).-X ours
é incrível, só me salvou uma hora de trabalho.Na verdade, as únicas duas estratégias que você gostaria de escolher são as nossas, se você deseja abandonar as alterações trazidas por ramificação, mas mantém a ramificação no histórico e a subárvore, se estiver mesclando um projeto independente no subdiretório do superprojeto (como 'git-gui' em ' repositório git ').
a mesclagem de polvo é usada automaticamente ao mesclar mais de duas ramificações. A resolução está aqui principalmente por razões históricas e para quando você é atingido por casos de canto de estratégia de mesclagem recursiva .
fonte
theirs
estratégia de mesclagem (isto é--strategy=theirs
), mas hátheirs
opção para arecursive
estratégia de mesclagem padrão (ou seja--strategy=recursive --strategy-option=theirs
, apenas-Xtheirs
).Estratégia de mesclagem "resolver" vs "recursiva"
Recursiva é a atual estratégia de duas cabeças padrão, mas depois de algumas pesquisas, finalmente encontrei algumas informações sobre a estratégia de mesclagem "resolver".
Retirado do livro O'Reilly, Version Control with Git ( Amazon ) (parafraseado):
Eu mesclei árvores com êxito usando "resolve" que falhou com a estratégia recursiva padrão. Eu estava recebendo
fatal: git write-tree failed to write a tree
erros e, graças a esta postagem no blog ( espelho ), tentei "-s resolve", que funcionou. Ainda não sei exatamente por que ... mas acho que foi porque eu tive alterações duplicadas nas duas árvores e resolvi "ignorá-las" adequadamente.fonte
Como as respostas acima não estão mostrando todos os detalhes da estratégia. Por exemplo, alguma resposta está faltando os detalhes sobre a importação
resolve
opção eorecursive
que tem muitas opções de sub comoours
,theirs
,patience
,renormalize
, etc.Portanto, eu recomendaria visitar a
git
documentação oficial que explica todos os recursos possíveis:https://git-scm.com/docs/merge-strategies
fonte