Acho que entendi errado a semântica do git pull. Eu pensei que:
git pull origin B:B
significava:
fetch the remote B
+
merge the remote B into the local B
Eu percebo que isso significa:
fetch the remote B and updates (if fast-forward is possible) the local B
+
merge the remote B into the local branch
Na verdade, git pull sempre fará sua mesclagem na ramificação local, independentemente do refspec.
Em outras palavras, pull = fetch + merge. A atualização da ramificação B local é feita por "fetch" e o conflito é gerado pela seguinte operação de mesclagem (na ramificação local).