Git puxa um determinado ramo do GitHub

Eu tenho um projeto com vários ramos. Eu tenho empurrado eles para o GitHub , e agora que outra pessoa está trabalhando neles eu preciso fazer um pull do GitHub. Funciona bem no mestre. Mas digamos que eu tenha ramo xyz. Como eu posso puxar o branch xyz do GitHub e mesclá-lo no branch xyz no meu localhost?

Eu realmente tenho minha resposta aqui: Empurre e puxe as ramificações no Git

Mas eu recebo um erro “! [Rejeitado]” e algo sobre “não avançar”.

Alguma sugestão?

Mas eu recebo um erro “! [Rejeitado]” e algo sobre “não avançar”

Isso porque o Git não pode mesclar as mudanças das ramificações para o seu mestre atual. Digamos que você tenha feito check-out do branch master e queira mesclar no branch remoto other-branch . Quando você faz isso:

 $ git pull origin other-branch 

O Git basicamente faz isso:

 $ git fetch origin other-branch && git merge other-branch 

Ou seja, um pull é apenas uma fetch seguida por uma merge . No entanto, quando pull , o Git irá mesclar other-branch se puder realizar uma fusão rápida . Uma mesclagem fast-forward é uma mesclagem na qual o header do branch no qual você está tentando se mesclar é um descendente direto do header do branch que você deseja mesclar. Por exemplo, se você tiver essa tree de histórico, a mesclagem de other-branch resultaria em uma mesclagem rápida:

 OOOOOO ^ ^ master other-branch 

No entanto, isso não seria uma mesclagem fast-forward:

  v master OOO \ \-OOOO ^ other-branch 

Para resolver seu problema, primeiro busque a ramificação remota:

 $ git fetch origin other-branch 

Em seguida, mescle-o em sua ramificação atual (suponho que seja o master ) e corrija os conflitos de mesclagem:

 $ git merge origin/other-branch # Fix merge conflicts, if they occur # Add merge conflict fixes $ git commit # And commit the merge! 

Simplesmente rastreie suas ramificações remotas explicitamente e um simples git pull fará exatamente o que você deseja:

 git branch -f remote_branch_name origin/remote_branch_name git checkout remote_branch_name 

Ou ainda mais adequado à documentação do GitHub sobre bifurcação :

 git branch -f new_local_branch_name upstream/remote_branch_name 

Você poderia puxar um ramo para um ramo com os seguintes comandos.

 git pull {repo} {remotebranchname}:{localbranchname} git pull origin xyz:xyz 

Quando você está no branch master, você também pode fazer o checkout de um branch como:

 git checkout -b xyz 

Isso cria uma nova ramificação, “xyz”, do mestre e a verifica diretamente.

Então você faz:

 git pull origin xyz 

Isso puxa o novo ramo para o seu branch xyz local.

A melhor maneira é:

 git checkout -b  / 

Não tenho certeza se entendi completamente o problema, mas puxar um branch existente é feito assim (pelo menos funciona para mim 🙂

 git pull origin BRANCH 

Isto está assumindo que sua filial local é criada fora da origem / BRANCH.

git fetch vai pegar a lista mais recente de ramificações.

Agora você pode git checkout MyNewBranch

Feito 🙂


Para mais informações, consulte docs: git fetch

Isso me ajudou a obter ramificação remota antes de mesclar isso em outro:

 git fetch repo xyz:xyz git checkout xyz 
 git pull   

Normalmente, se você tiver apenas o repo atribuído ao seu código, o nome de referência será origem.

Se você está trabalhando em dois repo como um local e outro para o controle remoto, você pode verificar a lista de recompra do git remote -v . isso mostra quantas repo’s são atribuídas ao seu código atual.

BranchName deve existir no gitreponame correspondente.

você pode usar os seguintes dois comandos para adicionar ou remover repo’s

 git remote add   git remote remove  

você também pode fazer

 git pull -r origin master 

consertar conflitos de mesclagem se houver

 git rebase --continue 

-r é para rebase. Isso fará com que você ramificar a estrutura de

  v master ooooo \ooo ^ other branch 

para

  v master oooooooo ^ other branch 

Isso levará a um histórico mais limpo. Nota: Caso você já tenha enviado sua outra ramificação para a origem (ou qualquer outro controle remoto), talvez seja necessário forçar o envio da ramificação após o rebase.

 git push -f origin other-branch 

eu fiz

 git branch -f new_local_branch_name origin/remote_branch_name 

Ao invés de

 git branch -f new_local_branch_name upstream/remote_branch_name 

Como sugerido por @innaM. Quando eu usei a versão upstream, ele disse ‘fatal: não é um nome de object válido:’ upstream / remote_branch_name ”. Eu não fiz git fetch origin como um comentário sugerido, mas simplesmente substitui upstream com origin . Eu acho que eles são equivalentes.