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.

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.

Outros 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

lembre-se de trocar os nomes do remote e branch para os que você utiliza em seu projeto

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

Mantenha-se atualizado

Não esqueça de me seguir no Twitter e assinar o Canal Mazer.dev no Youtube para receber atualizações de novos artigos, vídeo aulas e cursos gratuitos em desenvolvimento e engenharia de software.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *