Existem 4 arquivos envolvidos:
$LOCAL
O arquivo na ramificação em que você está mesclando; intocado pelo processo de mesclagem quando mostrado a você
$REMOTE
O arquivo na ramificação de onde você está mesclando; intocado pelo processo de mesclagem quando mostrado a você
$BASE
O 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ê
$MERGED
O arquivo parcialmente mesclado, com conflitos; esse é o único arquivo tocado pelo processo de mesclagem e, na verdade, nunca é mostrado para você emmeld
O $MERGED
arquivo é 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 $MERGED
arquivo, embora isso seja passado como um parâmetro oculto meld
para 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 $BASE
arquivo, mas no quarto parâmetro oculto de meld
, esse é o $MERGED
arquivo (que você nem vê). O $BASE
arquivo não contém nenhum conflito ou mesclagem parcial bem-sucedida porque não é o $MERGED
arquivo .
Na edição visual, ao apresentar o $BASE
arquivo (em vez do $MERGED
arquivo), git
basicamente 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 $MERGED
arquivo).
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 $MERGED
arquivo.
Mas as ferramentas visuais têm os meios para mostrar-lhe três arquivos: eles mostram os $LOCAL
, $BASE
, $REMOTE
arquivos. Você está escolhendo alterações dos $LOCAL
e $REMOTE
arquivos e você está trazendo os para o $BASE
arquivo, completamente re-construção e até mesmo substituir a fracassada tentativa de fusão que é o $MERGED
arquivo.
merge.conflictstyle
opção de configuração definida emdiff3
vez do padrãomerge
.