Estou aprendendo git e seguindo o livro da comunidade Git.
Anteriormente (há muito tempo), criei um repositório público no Github, com alguns arquivos. Agora eu configurei um repositório Git local no meu computador atual e confirmei alguns arquivos. Em seguida, adicionei um controle remoto à minha página do Github:
[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C
Isso pareceu ter sucesso:
[root@osboxes c]# git remote show learnc
* remote learnc
Fetch URL: https://github.com/michaelklachko/Learning-C
Push URL: https://github.com/michaelklachko/Learning-C
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (local out of date)
Agora, quero baixar os arquivos do meu repositório Github para o meu computador. Eu fiz isso:
[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.
No entanto, não vejo novos arquivos no meu diretório local. Como posso obtê-los?
Eu também tentei fazer isso:
[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
BTW, localmente, estou no ramo principal (não há outros ramos):
[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean
git init
? No último caso, esses repositórios não são relacionados (não têm confirmações comuns) e você não pode mesclá-los (pull é buscar + mesclar).Respostas:
Experimentar
--allow-unrelated-histories
Como o max630 comentou, ou como explicado aqui, o Git se recusa a mesclar histórias não relacionadas
fonte
Resolver conflitos e, em seguida,
fonte
Embora eu seja a favor de desbloquear as questões de trabalho das pessoas, não acho que "push --force" ou "--allow_unrelated_histories" devam ser ensinadas aos novos usuários como soluções gerais, porque elas podem causar estragos reais em um repositório quando as são usadas. sem entender por que as coisas não estão funcionando em primeiro lugar.
Quando você tem uma situação como esta em que começou com um repositório local e deseja criar um controle remoto no GitHub para compartilhar seu trabalho, há algo a ser observado.
Quando você cria o novo repositório online, existe a opção "Inicializar este repositório com um README". Se você ler as letras pequenas, será exibido "Pule esta etapa se estiver importando um repositório existente".
Você pode ter marcado essa caixa. Ou, da mesma forma, você fez um add / commit online antes de tentar um push inicial. O que acontece é que você cria um histórico de consolidação único em cada local e eles não podem ser reconciliados sem a permissão especial mencionada na resposta de Nevermore (porque o git não deseja que você opere dessa maneira). Você pode seguir alguns dos conselhos mencionados aqui ou, simplesmente, não marque essa opção na próxima vez que desejar vincular alguns arquivos locais a um novo controle remoto; mantendo o controle remoto limpo para esse impulso inicial.
Referência: minha primeira experiência com o git + hub foi encontrar esse mesmo problema e aprender muito a entender o que havia acontecido e por quê.
fonte
Se não houver histórico substancial em uma extremidade (ou seja, se for apenas um único readme confirmado no final do github), geralmente acho mais fácil copiar manualmente o leia-me para meu repositório local e fazer
git push -f
com que minha versão seja a nova confirmação raiz .Acho que é um pouco menos complicado, não requer lembrar de uma bandeira obscura e mantém a história um pouco mais limpa.
fonte
Em sua filial - diga mestre, puxe e permita histórias não relacionadas
Trabalhou para mim.
fonte
Execute o seguinte comando:
Um vim de mesclagem será aberto. Adicione alguma mensagem de mesclagem e:
E você está pronto para ir.
fonte
Quando eu usei
--allow-unrelated-histories
, este comando gerou muitos conflitos. Houve conflitos nos arquivos nos quais eu nem sequer trabalhei. Para superar o erro" Refusing to merge unrelated histories"
, usei o seguinte comando rebase:Após isso, as alterações não confirmadas são confirmadas com uma mensagem de confirmação. Por fim, execute o seguinte comando:
Depois disso, minha cópia de trabalho estava atualizada com a cópia remota e pude enviar minhas alterações como antes. Não há mais histórico de erros relacionados ao puxar.
fonte
git pull --rebase=merge --allow-unrelated-histories
como--rebase=preserve
está obsoleta git-scm.com/docs/git-pull#Documentation/…No meu caso, estava enfrentando o mesmo problema, especialmente a primeira solicitação pull tentando depois de adicionar remotamente um repositório Git. O seguinte erro estava ocorrendo.
Use o comando --allow-unrelated-histories. Funciona perfeitamente.
fonte