Git puxa um determinado ramo de GitHub
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!
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
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.
A melhor maneira é:
git checkout -b <new_branch> <remote repo name>/<new_branch>
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.
git fetch
vou buscar a última lista de ramos.
git checkout MyNewBranch
Feito:]
Para mais informações veja docs: git fetch
git fetch repo xyz:xyz
git checkout xyz
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>
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
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.