Tentando extrair arquivos do meu repositório Github: "recusando mesclar histórias não relacionadas"

151

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
MichaelSB
fonte
4
Quando você configurou seu repositório local, você clonou seu repositório Github ou simplesmente o fez 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).
Paulo
Eu git init. Então, devo clonar meu repositório do Github para corrigir isso?
21916 Michael'sB
1
Você pode clonar seu repositório do Github e continuar trabalhando com ele, mas ainda será um repositório separado. Deseja mesclar duas histórias não relacionadas?
Paul
Eu acho que quero mesclar históricos, mas realmente só quero combinar arquivos localmente e no github. Quero dizer, eu realmente não me importo com o histórico dos arquivos antigos que tenho no Github.
22616 MichaelisB

Respostas:

315

Experimentar --allow-unrelated-histories

Como o max630 comentou, ou como explicado aqui, o Git se recusa a mesclar histórias não relacionadas

Nunca mais
fonte
1
como observado nas notas de versão
sistemmaddict 12/09/16
Por que não existe uma opção de configuração para sempre definir isso? Toda vez que eu tenho que caçar essa opção; Eu trabalho com o git desde 2k8 e estou totalmente irritado com essa babá. A opção estúpida nem sempre estava lá. Pelo menos a mensagem de recusa deve incluir a substituição a ser usada.
Nyov 12/07/19
98
git checkout master
git merge origin/master --allow-unrelated-histories

Resolver conflitos e, em seguida,

git add -A .
git commit -m "Upload"
git push
Do Nhu Vy
fonte
1
Obrigado por elaborar a solução acima.
Rahul Raj
39

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ê.

BigJMoney
fonte
12

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 -fcom 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.

captncraig
fonte
11

Em sua filial - diga mestre, puxe e permita histórias não relacionadas

git pull origin master --allow-unrelated-histories

Trabalhou para mim.

Edgar256
fonte
1
Esse comando é o que você precisa concordar em adicionar uma licença ou um Leia-me ao criar um repositório de origem no Github.
F1Linux 10/06/19
4

Execute o seguinte comando:

git pull origin master --allow-unrelated-histories

Um vim de mesclagem será aberto. Adicione alguma mensagem de mesclagem e:

  1. Pressione ESC
  2. Pressione Shift + ';'
  3. Pressione 'w' e depois pressione 'q'.

E você está pronto para ir.

KayV
fonte
3

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:

git pull --rebase=preserve --allow-unrelated-histories

Após isso, as alterações não confirmadas são confirmadas com uma mensagem de confirmação. Por fim, execute o seguinte comando:

git rebase --continue

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.

Tasnim Fabiha
fonte
1
Versão real: git pull --rebase=merge --allow-unrelated-historiescomo --rebase=preserveestá obsoleta git-scm.com/docs/git-pull#Documentation/…
Luckylooke
0

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.

fatal: refusing to merge unrelated histories on every try

Use o comando --allow-unrelated-histories. Funciona perfeitamente.

git pull origin branchname --allow-unrelated-histories
Jitendra Rathor
fonte