Git puxa um determinado ramo de GitHub

Tenho um projecto com vários ramos. Tenho-os empurrado para o GitHub, e agora que alguém está a trabalhar neles, preciso de fazer um puxão do GitHub. Funciona bem no mestre. Mas digamos que tenho o branch xyz. Como posso retirar o ramo xyz do GitHub e fundi-lo no ramo xyz no meu localhost?

Tenho a minha resposta aqui.: empurrar e puxar os ramos no Git

Mas eu tenho um erro! "e algo sobre "não Rápido" frente".

Alguma sugestão?

Author: Community, 2009-11-10

10 answers

Mas eu tenho um erro! [rejeitado] "e algo sobre" non fast forward "
Isso é porque o Git não pode fundir as mudanças dos ramos para o seu mestre actual. Digamos que você saiu do branch master, e você quer se fundir no branch remoto {[[7]}. Quando fizer isto:
$ git pull origin other-branch
O Git está basicamente a fazer isto.
$ git fetch origin other-branch && git merge other-branch
Isto é, um pull é apenas um fetch seguido por um merge. No entanto, quando pull - ing, O Git irá apenas reunir other-branch se Ele pode executar uma junção rápida para a frente . A junção defast-forward é uma junção na qual a cabeça do ramo em que está a tentar fundir é um descendente directo da cabeça do ramo em que deseja fundir. Por exemplo, se você tiver esta árvore de histórico, então a junção other-branch resultaria numa junção rápida:
O-O-O-O-O-O
^         ^
master    other-branch

No entanto, isto não seria uma fusão rápida:

    v master
O-O-O
\
 \-O-O-O-O
         ^ other-branch
Para resolver o teu problema, primeiro busca o ramo remoto:
$ git fetch origin other-branch

Depois junta - o ao teu ramo actual( presumo que seja master), e resolve todos os conflitos de fusão:

$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!
 535
Author: mipadi, 2009-11-10 19:17:47

Basta seguir os seus galhos remotos explicitamente e um simples {[[2]} fará exactamente o que quiser:

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
 259
Author: innaM, 2016-02-12 22:26:59

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 ramo mestre você também poderia primeiro checar um ramo como:

git checkout -b xyz

Isto cria um novo ramo, "xyz", do mestre e verifica-o directamente.

Depois fazes:

git pull origin xyz
Isto puxa o novo ramo para o seu ramo local.
 97
Author: Robert Cabri, 2016-02-12 22:25:15

A melhor maneira é:

git checkout -b <new_branch> <remote repo name>/<new_branch>
 71
Author: mohit, 2016-02-12 22:27:40

Não tenho a certeza se entendo completamente o problema, mas puxar um ramo existente é feito assim (pelo menos funciona para mim:)

git pull origin BRANCH

Isto assumindo que o seu ramo local é criado fora do ramo de origem/ramo.

 29
Author: Alex N., 2016-02-12 22:23:03

git fetch vou buscar a última lista de ramos.

Agora podes git checkout MyNewBranch

Feito:]


Para mais informações veja docs: git fetch

 27
Author: Bradley Flood, 2015-02-27 05:38:00
Isto ajudou-me a obter um ramo remoto antes de o fundir noutro.
git fetch repo xyz:xyz
git checkout xyz
 8
Author: anatoly techtonik, 2016-02-15 21:25:49
git pull <gitreponame> <branchname>

Normalmente se você só tem repo atribuído ao seu código, então o gitreponame seria a origem.

Se estiver a trabalhar em dois acordos de recompra como se um fosse local e outro remoto como se pudesse verificar a lista do repo a partir de git remote-v . isto mostra quantos acordos de recompra são atribuídos ao seu código actual.

O BranchName deve existir no gitreponame correspondente.

Pode usar dois comandos para adicionar ou remover o repo's

git remote add <gitreponame> <repourl>
git remote remove <gitreponame>
 2
Author: prathap, 2017-12-08 04:27:00

Também pode fazer

git pull -r origin master

Corrigir conflitos de junção se existir

git rebase --continue

-R é para ajuste de dose. Isto fará com que você ramifique a estrutura de

        v  master       
o-o-o-o-o
     \o-o-o
          ^ other branch

A

        v  master       
o-o-o-o-o-o-o-o
              ^ other branch
Isto vai levar a uma história mais limpa. Nota: no caso de você já ter empurrado o seu outro-branch para a origem( ou qualquer outro remoto), você pode ter que forçar o seu branch após o ajuste.
git push -f origin other-branch
 1
Author: PKV, 2017-08-28 09:10:46

Eu fiz

git branch -f new_local_branch_name origin/remote_branch_name

Em vez de

git branch -f new_local_branch_name upstream/remote_branch_name

Como sugerido por @inham. Quando eu usei a versão upstream, ela disse 'fatal: não um nome de objeto válido: 'upstream/remote_branch_name". Eu não fiz git fetch origin como um comentário sugerido, mas simplesmente substituí upstream por origin. Acho que são equivalentes.

 0
Author: Vicky, 2018-07-25 15:44:58