Fazer um ramo Git existente rastrear um ramo remoto?

Eu sei como fazer um novo ramo que rastreie ramos remotos, mas como faço um ramo existente rastrear um ramo remoto?

eu sei que posso apenas editar o arquivo {[[0]}, mas parece que deve haver uma maneira mais fácil.

Author: Pat Notz, 2009-02-06

19 answers

Deram-lhe um ramo foo e um remoto upstream:

A partir do Git 1.8.0:

git branch -u upstream/foo

Ou, se o ramo local foo não for o ramo actual:

git branch -u upstream/foo foo

Ou, se você gosta de escrever comandos mais longos, estes são equivalentes aos dois acima:

git branch --set-upstream-to=upstream/foo

git branch --set-upstream-to=upstream/foo foo

A partir do Git 1.7.0:

git branch --set-upstream foo upstream/foo

Notas:

Todos os comandos acima farão com que o ramo local foo siga o ramo remoto foo do remoto upstream. O velho (1.7.x) sintaxe é depreciado em favor da nova sintaxe (1.8+). A nova sintaxe pretende ser mais intuitiva e mais fácil de lembrar.


Veja também: porque preciso de fazer `--set-upstream` o tempo todo?

 3822
Author: Dan Moulding, 2017-05-23 12:26:34

Você pode fazer o seguinte (assumindo que você está fora do master e quer empurrar para um branch master remoto):

Configure o 'remoto' se ainda não o tiver

git remote add origin ssh://...

Agora configura o mestre para saber seguir:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

E empurre:

git push origin master
 213
Author: Paul Hedderly, 2018-02-28 20:20:49

Faço isto como um efeito secundário de empurrar com a opção -ucomo em

$ git push -u origin branch-name

A opção longa equivalente é --set-upstream.

O comando git-branch também compreende --set-upstream, mas o seu uso pode ser confuso. a versão 1.8.0 modifica a interface.

git branch --set-upstream é obsoleto e pode ser removido num futuro relativamente distante. {[8] } foi introduzido com uma ordem de argumentos mais sÃ.

Era tentador dizer: isso diz ao Git para organizar o ramo local "origin / master" para se integrar com o ramo atualmente verificado, o que é altamente improvável o que o usuário quis dizer. A opção está desactualizada; utilize a nova opção --set-upstream-to (com uma opção curto-e-doce -u).
Digamos que você tem um ramo local e quer que ele trate o ramo pelo mesmo nome que o seu rio acima. Faça isso acontecer com
$ git branch foo
$ git branch --set-upstream-to=origin/foo

Ou apenas

$ git branch --set-upstream-to=origin/foo foo
 133
Author: Greg Bacon, 2017-06-20 12:42:50

Talvez encontres o git_remote_branch ferramenta útil. Ele oferece comandos simples para criar, publicar, apagar, rastrear e renomear ramos remotos. Uma boa característica é que você pode pedir a um comando grb para explicar quais comandos do git que ele executaria.

grb explain create my_branch github
# git_remote_branch version 0.3.0

# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch
 51
Author: James Mead, 2014-06-28 16:36:15

Na verdade, para a resposta aceite ao trabalho:

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa
 49
Author: Hedgehog, 2014-06-28 16:33:27
Eu acredito nisso tão cedo quanto o Git 1.5.x você poderia fazer uma ramificação local $BRANCH rastrear uma ramificação remota origin/$BRANCH, assim.

Dado que $BRANCH e origin/$BRANCH Existem, e que ainda não saiu $BRANCH (Mude se já o fez), faça:

git branch -f --track $BRANCH origin/$BRANCH
Isto recria como um ramo de localização. O -f força a criação apesar de já existir. --track é opcional se os valores por omissão habituais estiverem no lugar (isto é, o parâmetro git-config branch.autosetupmerge é verdadeiro).

Nota, se origin/$BRANCH ainda não existe, você pode criá-lo empurrando o seu $BRANCH local para o repositório remoto com:

git push origin $BRANCH

Seguido pelo comando anterior para promover o ramo local em um ramo de rastreamento.

 42
Author: wu-lee, 2014-06-28 16:35:24

1 - actualize os seus meta-dados locais usando: git fetch --all

enter image description here

2-mostra os seus ramos remotos e locais usando: git branch-a , veja a seguinte imagem

enter image description here

3 - mude para o ramo alvo, que deseja ligar ao remoto: usando

Git checkout branchName

Exemplo:

enter image description here

4 - Ligue o seu ramo local a um ramo remoto usando:

Git branch -- set-upstream-to nameOfRemoteBranch

N. B : nomeofremotebranch: para copiar da saída do Passo 2 "git branch-r"

Exemplo de Utilização:

enter image description here

 29
Author: Monsif EL AISSOUSSI, 2016-11-15 23:39:54

Certifica-te que corres :

git config push.default tracking

Para ser capaz de libertar os problemas

 22
Author: romanlv, 2011-09-08 22:59:18

Editar {[[0]} é provavelmente a maneira mais fácil e mais rápida. É o que os comandos Git para lidar com ramificações remotas estão fazendo, de qualquer maneira.

Se você não quiser mexer com o arquivo à mão (e não é assim tão difícil de fazer), você pode sempre usar git config para fazê-lo...mas novamente, isso vai apenas editar o arquivo .git/config, de qualquer maneira.

Existem, é claro, formas de seguir automaticamente um ramo remoto ao usar git checkout (passando a bandeira --track, por exemplo), mas estes comandos funcionam com Novos ramos, não existentes.

 21
Author: mipadi, 2009-02-06 15:17:54

Em muito curto

git branch --set-upstream yourLocalBranchName origin/develop

Isto fará com que o seu yourLocalBranchName Localize o ramo remoto chamado develop.

 16
Author: MadNik, 2014-03-31 18:33:37

Para 1.6.x, pode ser feito usando a ferramenta git_remote_branch :

grb track foo upstream

Isso fará com que o Git Faça foo track upstream/foo.

 14
Author: wik, 2013-03-09 11:05:30
Aqui, usando github e git version 2.1.4, basta fazer:
$ git clone [email protected]:user/repo.git

E os comandos são fornecidos por itelsef, mesmo que não estejam ligados localmente:

$ git remote show origin

* remote origin
  Fetch URL: [email protected]:user/repo.git
  Push  URL: [email protected]:user/repo.git
  HEAD branch: master
  Remote branches:
    develop tracked         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    master  tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
Mas, é claro, ainda não há sucursal local.
$ git branch
* master                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Vês? Agora se você apenas verificar develp, ele fará a magia automaticamente:
$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
Tão fácil!

Resumo. execute apenas estes 2 comandos:

$ git clone [email protected]:user/repo.git
$ git checkout develop
 8
Author: Dr Beco, 2015-11-29 23:04:57

Usar a opção '--track '

  • Após um git pull :

    git checkout --track <remote-branch-name>

  • Ou:

    git fetch && git checkout <branch-name>

 7
Author: Loukan ElKadi, 2018-03-27 08:56:37

Para criar um novo ramo, poderíamos usar o seguinte comando

 git checkout --track -b example origin/example 
Para que o ramo já criado crie uma ligação entre remoto e depois a partir desse ramo use abaixo do comando

 git branch -u origin/remote-branch-name
 6
Author: jithu reddy, 2017-04-20 10:24:24

Em algo relacionado de maneira que eu estava tentando adicionar um rastreamento remoto ramo de um ramo já existente, mas não tem acesso ao repositório remoto no sistema onde eu queria acrescentar que de rastreamento remoto de ramo em (porque eu frequentemente exportar uma cópia do presente acordo de recompra via sneakernet para outro sistema que tem acesso a empurrar para que remota). Eu descobri que não havia maneira de forçar a adição de um branch remoto no local que ainda não tinha sido obtido (então local não sabia que o branch existia no remoto e eu teria o erro: {[[0]}).

No final, consegui adicionar o novo, anteriormente desconhecido ramo remoto (sem obter), adicionando um novo ficheiro head em {[[1]} e depois copiar o ref (a sobrancelha era mais rápida, lame como era ;-) do sistema com acesso ao repo de origem para a estação de trabalho (com o repo local onde estava a adicionar o ramo remoto).

Depois disso, dava-me jeito.git branch --set-upstream-to=origin/remotebranchname
 4
Author: Ville, 2015-10-24 03:45:47

USO o seguinte comando (suponha que o nome do seu ramo local seja "branch-name-local" e o nome do ramo remoto seja "branch-name-remote"):

$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local

Se ambos os ramos locais e remotos têm o mesmo nome, então faça o seguinte:

$ git branch --set-upstream-to=origin/branch-name branch-name
 4
Author: yrazlik, 2018-10-12 10:03:31
Esta não é uma resposta direta a esta pergunta, mas eu queria deixar uma nota aqui para qualquer um que possa estar tendo o mesmo problema que eu ao tentar configurar um ramo upstream.

Cuidado com empurre.predefinição .

Com versões git mais antigas, o valor por omissão foi correspondência , o que causaria um comportamento muito indesejável se tivesse, por exemplo:

Local branch "master" tracking to origin / master

Ramificação remota "upstream" a seguir para montante / mestre

Se tentou " git push "quando estava no ramo" upstream", com push.a correspondência predefinida do git iria automaticamente tentar fundir o ramo local " master "em" upstream/master", causando um monte de caos.

Isto dá um comportamento mais são:

Git config -- global push.montante predefinido

 3
Author: Tom Mettam, 2016-05-21 12:53:42

Ou simplesmente por:

Mude para o ramo se já não estiver nele:

[za]$ git checkout branch_name

Corre

[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.
E estás pronto para ...
 [za]$ git push origin branch_name

Você pode alawys dar uma olhada no arquivo de configuração para ver o que está rastreando o que, executando:

 [za]$ git config -e
Também é bom saber isso, mostra quais ramos são rastreados e quais não são. :
  [za]$ git remote show origin 
 3
Author: zee, 2018-05-22 01:43:47

Isto também funcionaria

git branch --set-upstream-to=/< remote>/< branch> < localbranch>
 -1
Author: Abhi, 2016-06-22 17:03:05