Git puxando um branch de outro repositório?

86

Eu tenho um repositório git local que é um clone de um repositório no github. Alguém bifurcou o repositório e fez alterações em um novo branch em um novo repositório. Quero mover este novo branch para o meu repositório (localmente para trabalhar nele antes de mesclar com o master).

Eu tentei criar um novo branch e, em seguida, puxar do repositório bifurcado, mas ele reclama porque o novo branch é uma cópia do branch master, bem como as alterações do arquivo local, por isso diz

error: Your local changes to the following files would be overwritten by merge.

Então, como posso puxar o branch no outro repositório para um novo branch no meu repositório local?

Espero que faça sentido. Caso contrário, este é meu repositório: https://github.com/MatthewLM/cbitcoin

Como você pode ver, alguém criou um novo repositório com o branch "linuxBuild": https://github.com/austonst/cbitcoin/tree/linuxBuild

Eu quero esse branch no meu repositório local para MatthewLM / cbitcoin.

Como posso fazer isso?

Matthew Mitchell
fonte

Respostas:

156

Você precisa ter certeza de que isso git statusmostra que não existem mudanças não planejadas em seu repositório local.
Você pode fazer isso primeiro armazenando suas alterações locais e, em seguida, puxando esse branch. Depois disso, você pode aplicar seu estoque.


Se quiser recriar a estrutura de branch da bifurcação em seu repositório local, você pode fazer o seguinte:

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

Isso criará o branch local fork_branchcom o mesmo histórico <branch>da bifurcação, ou seja fork_branch, ramificará do seu masterwhere <branch>no fork. Além disso, seu branch local agora rastreará aquele branch no fork, para que você possa facilmente obter novas alterações confirmadas no fork.

Acho que você ainda precisa ter certeza de que sua cópia de trabalho não contém nenhuma alteração.

Daniel Hilgarth
fonte
OK, obrigado. Isso seria ótimo se eu quisesse minhas alterações locais e os commits não encontrados no branch do fork. Mas e se eu quiser que o novo branch seja exatamente como está no repositório fork? Isso inclui remover quaisquer commits do meu próprio repositório após a bifurcação para este novo branch. Dessa forma, seria como se o branch fosse feito no meu próprio repositório ao invés de um bifurcado.
Matthew Mitchell
Bem, sua resposta é uma solução aceitável para o que eu preciso fazer, mas eu acharia mais direto se pudesse puxar um novo branch em um repositório. Vou esperar um pouco para ver o que os outros dizem.
Matthew Mitchell
@MatthewMitchell: Verifique a atualização. É isso que você estava procurando?
Daniel Hilgarth
Bem, eu usei o método de mesclá-lo com outro branch (acabei de mesclá-lo com o master) no final, mas no caso em que quero apenas um branch exatamente como é de outro repositório, tentarei buscar e método de verificação que você descreveu. Obrigado.
Matthew Mitchell
Usado para migrar outro branch "gh-pages" de outro repo!
Marcello de Sales
37

Método sem adicionar remoto.

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>
Alex78191
fonte
2
Obrigado por isso, marquei-o e continuo voltando!
Shane Smiskol
2
Melhor resposta para 2020
Diamante