Durante git rebase origin/development
a seguinte mensagem de erro é mostrada no Git:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Minha versão do Git é 2.9.0. Costumava funcionar bem na versão anterior.
Como posso continuar essa reformulação, permitindo históricos não relacionados com a bandeira forçada introduzida no novo lançamento?
git-rebase
situação enquanto a resposta dá uma bandeira paragit-merge
git pull [repo URL]
em vez degit clone [repo URL]
Respostas:
O comportamento padrão mudou desde o Git 2.9:
Veja o changelog do release do Git para mais informações.
Você pode usar
--allow-unrelated-histories
para forçar a mesclagem.fonte
--allow-unrelated-histories
permanentemente?git pull
também. Foi naquele "evento raro que mescla histórias de dois projetos que iniciaram suas vidas de forma independente".git --work-tree="." pull --allow-unrelated-histories
No meu caso, o erro ocorreu
fatal: refusing to merge unrelated histories
em todas as tentativas, especialmente na primeira solicitação pull após adicionar remotamente um repositório Git.O uso do
--allow-unrelated-histories
sinalizador funcionou com uma solicitação pull desta maneira:fonte
git clone
.Tente o seguinte comando:
Isso deve resolver seu problema.
fonte
Eu recebi esse erro ao configurar um repositório local primeiro. Então eu fui ao GitHub e criei um novo repositório. Então eu corri
Quando tentei empurrar ou puxar, sempre recebia o mesmo
fatal: unrelated_histories
erro.Aqui está como eu o consertei:
fonte
.git
pasta, executougit init
e fez o que Adithya disse, exceto a parte de mesclagem.Para isso, digite o comando:
Por exemplo,
Referência:
Problema de histórias não relacionadas ao GitHub
fonte
Você será roteado para uma janela de edição do Vim:
git push --set-upstream origin <branch>
fonte
:x<Enter>
willEu tive o mesmo problema. Tente o seguinte:
fonte
Tentar
git pull --rebase development
fonte
git pull --rebase=preserve --allow-unrelated-histories development
newOrigin branch
invés dedevelopment
) adicionou a confirmação inicial ao topo da minha filial local, removendo efetivamente quase tudo dela. Eu queria que o commit inicial do novo controle remoto estivesse na parte inferior.Para Android Studio e IntelliJ:
Primeiro, comprometa tudo e resolva quaisquer conflitos.
Em seguida, abra o terminal abaixo do IDE e digite:
Agora você pode empurrar.
fonte
ADVERTÊNCIA, ISSO PODERÁ SUBSTITUIR O REPOSITÓRIO REMOTO
Isso funcionou para mim:
fonte
Como todas as outras respostas não estão realmente respondendo à pergunta, aqui está uma solução inspirada por essa resposta em uma pergunta relacionada.
Então você recebe seu erro
git rebase
:Na verdade, esse erro não cancela a rebase, mas agora você está no meio dela:
Agora você pode fazer a mesclagem manualmente. Descubra as confirmações pai da confirmação de mesclagem original:
Descubra qual dos dois pais de mesclagem é o que foi mesclado ao atual (provavelmente o segundo, verifique com
git log 222222222
) e faça a mesclagem manualmente, copiando a mensagem de confirmação do commit de mesclagem original:fonte
Eu tive o mesmo problema. O problema é remoto tinha algo impedindo isso.
Eu criei um repositório local pela primeira vez. Eu adicionei um arquivo
LICENSE
eREADME.md
ao meu local e cometi.Como eu queria um repositório remoto, criei um no GitHub. Aqui cometi um erro ao verificar "Inicializar este repositório com um README" , que também criou um README.md no controle remoto.
Então agora quando eu corri
Eu tenho:
Agora, para superar isso, eu fiz
O que resultou no erro abaixo:
Eu tentei:
Resultado:
Solução:
Eu removi o repositório remoto e criei um novo (acho que apenas a remoção do arquivo
README
poderia ter funcionado) e depois disso o seguinte funcionou:fonte
git push --force ...
seria uma solução adequada no passo 1 neste caso particularIsso geralmente acontece quando você confirma a primeira vez no repositório remoto. Como o erro diz claramente "recusando-se a mesclar históricos não relacionados", precisamos usar o sinalizador --allow-related-related-historories.
Agora, existem alguns conflitos que temos que resolver manualmente. Depois disso, apenas confirme o código e pressione-o.
fonte
--allow-unrelated-histories
bandeira.Duas possibilidades quando isso pode acontecer -
Você clonou um projeto e, de alguma forma, o diretório .git foi excluído ou corrompido. Isso faz com que o Git desconheça seu histórico local e, portanto, fará com que ele gere esse erro quando você tenta enviar ou receber do repositório remoto.
Você criou um novo repositório, adicionou algumas confirmações e agora está tentando extrair de um repositório remoto que já possui algumas confirmações. O Git também lançará o erro neste caso, pois não tem idéia de como os dois projetos estão relacionados.
SOLUÇÃO
mestre de origem do git pull --allow-unrelated-historories
Ref - https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error
fonte
Eu lutei com isso também, mas consegui encontrar uma solução alternativa.
Quando você se deparar com o erro acima, basta escolher a confirmação de mesclagem e continuar a rebase:
fonte
Primeiro, puxe as alterações remotas para o seu local usando o seguinte comando:
** branchname é mestre no meu caso.
Quando o comando pull é executado, ocorre conflito. Você deve resolver os conflitos. Eu uso o Android Studio para resolver conflitos.
Quando os conflitos são resolvidos, a mesclagem é feita!
Agora você pode empurrar com segurança.
fonte
Resolve Conflict
no AS. Às vezes, o pop-up / balão inferior direito desaparece e não consigo fazer nada. Obrigado @oiyioEu acabei de fazer
fonte
Ao fazer um
git pull
, recebi esta mensagemfatal: refusing to merge unrelated histories
para um módulo de repo onde não havia atualizado a cópia local por um tempo.Eu executei este comando apenas para atualizar o local da origem. Eu só queria as últimas informações do controle remoto e não precisava de alterações locais.
Isso corrigiu no meu caso.
fonte
Tenha uma leitura com o link abaixo, funciona para mim (sem usar a
--allow-unrelated-histories
bandeira)https://stackoverflow.com/a/39783462/4324288
fonte
Estou usando a rebase há anos e nunca havia encontrado esse problema. No entanto, seu primeiro problema é que você tenta fazê-lo diretamente na ramificação
development
remota do repositório remoto, chamadoorigin
. Isso está literalmente errado porque rebase é um comando perigoso, que reestrutura a história do git. Dito isto, você deve primeiro tentar seu repositório local e pressioná-lo apenas, se ele funcionar para você conforme o esperado.Portanto, meu fluxo de trabalho de rebase usual se parece com o seguinte (mas lembre-se de que você não deve usar rebase em ramificações, o qual não é o único comitê. Para essas ramificações, use simplesmente mesclar e resolver conflitos, se aplicável):
master
; como um comando de uma linha):git checkout master && git pull origin master && git checkout development
git rebase master
git push -f origin development
Como já mencionei, lembre-se de que a reorganização manipula a história do git, que geralmente é uma coisa ruim. No entanto, é possível fazer isso em filiais, onde ninguém mais se compromete. Para manter a ramificação flexível para os outros desenvolvedores, use outra estratégia de mesclagem, como mesclagem em si, squash ou cherrypick. Portanto, em outras palavras: Rebase não deve ser sua ferramenta no desenvolvimento distribuído. Funciona bem se você é o único que trabalha neste repositório.
Usamos a estratégia de ramificação de recursos. Nisso, eu costumo usar rebase para obter as "atualizações" de outros desenvolvedores, que entretanto aconteceram no ramo mestre. Fazendo isso, reduz o tamanho das confirmações visíveis em uma solicitação de recebimento. Portanto, torna mais fácil para o revisor de código ver minhas alterações feitas neste ramo de recursos.
fonte