O erro fatal: refusing to merge unrelated histories é lançado ao tentar fazer o merge automático de projetos que possuem históricos Git diferentes. Desde o Release 2.9.0 o Git não permite esta operação.

O erro fatal: refusing to merge unrelated histories geralmente acontece quando você tenta fazer o git pull de um repositório remoto, mas o seu repositório local possui um histórico de commits, branches, etc, diferente do que está no repositório remoto.

O que significa git unrelated histories

O erro de recusar mesclar históricos não relacionados ocorre quando um diretório .git está ilegível ou quando você está tentando extrair dados de um repositório com seu próprio histórico de commits.

fatal: refusing to merge unrelated histories
fatal: refusing to merge unrelated histories

Este erro informa que você está tentando mesclar com Git dois projetos não relacionados à mesma árvore de trabalho.

Um dos motivos pode ser o início de um repositório local e a adição posterior do remote que já contém algum arquivo, por exemplo um README.md.

Outrra razão seria quando você cria um novo repositório, faz alguns commits e tenta puxar de outro repositório remoto. Este erro será exibido porque o repositório local com o qual você está trabalhando terá um histórico diferente do projeto que você está tentando recuperar.

Você ainda pode se deparar com esse erro se o diretório .git dentro de um projeto foi excluído ou corrompido. Nesse caso, a linha de comando do Git pode não ser capaz de ler o histórico do seu projeto local.

Ao tentar enviar ou extrair dados de um repositório remoto, este erro ocorrerá. Isso ocorre porque o Git não sabe se o repositório remoto é compatível com o seu repositório atual.

Como resolver fatal: refusing to merge unrelated histories

Para resolver esse erro basta usar a opção allow-unrelated-histories.

Para permitir que o Git faça o merge de dois projetos com históricos diferentes, passe o parâmetro --allow-unrelated-histories ao fazer o pull, assim:

git pull origin master --allow-unrelated-histories

Ao executar a linha de comando acima você deve conseguir executar o comando git pull ou git merge de históricos diferentes sem problemas, como no exemplo a seguir:

git pull origin main --allow-unrelated-histories

# resultado

Username for 'https://gitlab.com': nunomazer
Password for 'https://[email protected]': 
From https://gitlab.com/nunomazer/meu-projeto
 * branch            main       -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 README.md | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 README.md