Existem 4 arquivos envolvidos:
$LOCALO arquivo na ramificação em que você está mesclando; intocado pelo processo de mesclagem quando mostrado a você
$REMOTEO arquivo na ramificação de onde você está mesclando; intocado pelo processo de mesclagem quando mostrado a você
$BASEO ancestral comum de $ LOCAL e $ REMOTE, ie. o ponto em que os dois ramos começaram a desviar o arquivo considerado; intocado pelo processo de mesclagem quando mostrado a você
$MERGEDO arquivo parcialmente mesclado, com conflitos; esse é o único arquivo tocado pelo processo de mesclagem e, na verdade, nunca é mostrado para você emmeld
O $MERGEDarquivo é aquele que contém os <<<<<<, >>>>>>, =====(e, talvez, ||||||marcadores) (que os conflitos delimitar). Este é o arquivo que você edita manualmente para corrigir conflitos.
A edição manual de conflitos e a edição visual de conflitos são feitas em arquivos diferentes e apresentam informações diferentes.
Ao usar o mergetool (assumir meld), os arquivos que estão vendo nele são: $LOCAL, $BASE, $REMOTE. Observe que você não vê o $MERGEDarquivo, embora isso seja passado como um parâmetro oculto meldpara gravar lá o resultado da edição.
Em outras palavras, em meld, você está editando o arquivo no meio $BASE, e escolhe todas as alterações manualmente, da esquerda ou da direita . É um arquivo limpo, não tocado pelo processo de mesclagem. A única falha é que, quando você salva, você não salva no $BASEarquivo, mas no quarto parâmetro oculto de meld, esse é o $MERGEDarquivo (que você nem vê). O $BASEarquivo não contém nenhum conflito ou mesclagem parcial bem-sucedida porque não é o $MERGEDarquivo .
Na edição visual, ao apresentar o $BASEarquivo (em vez do $MERGEDarquivo), gitbasicamente descarta todas as suas tentativas de fazer a fusão (essas tentativas são visíveis, se você desejar, no arquivo $ MERGED) e permite fazer a fusão completamente do zero .
A conclusão é que, nos conflitos de mesclagem manual e visual, você não está visualizando os mesmos arquivos, mas o resultado final é gravado no mesmo arquivo (que é o $MERGEDarquivo).
A correção manual dos conflitos é feito em $MERGED, porque git não tem média de apresentar-lhe três arquivos, por isso esmaga as informações dos três arquivos ( $LOCAL, $BASE, $REMOTE) em que $MERGEDarquivo.
Mas as ferramentas visuais têm os meios para mostrar-lhe três arquivos: eles mostram os $LOCAL, $BASE, $REMOTEarquivos. Você está escolhendo alterações dos $LOCALe $REMOTEarquivos e você está trazendo os para o $BASEarquivo, completamente re-construção e até mesmo substituir a fracassada tentativa de fusão que é o $MERGEDarquivo.
merge.conflictstyleopção de configuração definida emdiff3vez do padrãomerge.