Git obter ramo remoto

O meu colega e eu estamos a trabalhar no mesmo repositório que o ramificámos em dois ramos, cada um tecnicamente, para projectos diferentes, mas eles têm semelhanças, por isso, às vezes, vamos querer comprometer-nos com o mestre do ramo.

No entanto, tenho o ramo. A minha pergunta é, como é que o meu colega pode puxar esse ramo especificamente? A git clone do repo não parece criar os ramos localmente para ele, embora eu possa vê - los viver em uncuddle após um empurrão sobre o meu final.

também, quando originalmente fiz o ramo fiz -b checkout. Não tens a certeza se isso faz muita diferença?

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover
Estes são os comandos que comandei. Mas definitivamente não está a funcionar. Eu quero ser capaz de verificar esse ramo e, em seguida, empurrar e commit de volta apenas as mudanças de ramos de vários colaboradores ou estações de trabalho.

Author: AshNaz87, 2012-03-02

25 answers

Você precisa criar um ramo local que rastreie um ramo remoto. O seguinte comando irá criar um ramo local chamado daves_ Branch , seguindo o ramo remoto origin / daves_ Branch . Quando você empurrar suas alterações, o ramo remoto será atualizado.

Para a maioria das versões do git:

git checkout --track origin/daves_branch

--track is shorthand for git checkout -b [branch] [remotename]/[branch] where[remotename] is origin in this case and[branch] is twice the same, daves_branch in this case.

Para git 1.5.6.5 você precisava disto:

git checkout --track -b daves_branch origin/daves_branch

Para o git 1.7.2.3 e superior isto é suficiente (pode ter começado mais cedo, mas esta é a confirmação mais precoce que eu poderia encontrar rapidamente):

git checkout daves_branch

Note que com versões recentes do git, este comando não irá criar um ramo local e irá colocá-lo num estado de 'cabeça separada'. Se quiser um ramo local, use a opção --track. Detalhes completos aqui: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches

 2304
Author: ralphtheninja, 2018-02-05 16:10:03

Já usei fetch seguida de checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... onde <rbranch> é o ramo remoto ou fonte ref e <lbranch> é ainda inexistente filial local ou destino ref você deseja rastrear e que você provavelmente deseja nome o mesmo que o ramo remoto ou fonte ref. Isto é explicado em opções na explicação de <refspec>.

O Git é tão inteligente que completa automaticamente o primeiro comando se eu tab depois das primeiras letras do ramo remoto. IE: eu nem sequer tenho que nomear o ramo local, Git automaticamente copia o nome do ramo remoto para mim. Obrigado, Git!

Também como a resposta nesta semelhante assim post mostra, se você não nomear o ramo local em fetch, você ainda pode criá-lo quando o verificar usando a bandeira -b. IE: git fetch <remote> <branch> seguido de git checkout -b <branch> <remote>/<branch> faz exactamente o mesmo que a minha resposta inicial. E, evidentemente, se repo tem apenas um remoto, então você pode apenas fazer git checkout <branch> depois de fetch e ele irá criar um ramo local para você. por exemplo: acabaste de clonar um repo e queres verificar ramos adicionais do remoto.

Creio que parte da documentação para fetch pode ter sido copiada literalmente de pull. Em particular, a secção sobre <refspec> em opções é a mesma. No entanto, não acredito que fetch alguma vezmerge, para que, se te fores embora o lado de destino do cólon vazio fetch não deve fazer nada.

Nota: que git fetch <remote> <refspec> é o diminutivo de {[19] } que, portanto, não faria nada, mas git fetch <remote> <tag> é o mesmo que git fetch <remote> <tag>:<tag> que deve copiar o remoto <tag> localmente.

Acho que isto só é útil se quiser copiar um ramo remoto localmente, mas não necessariamente verificar imediatamente. Caso contrário, utilizaria agora a resposta aceite acima , que é explicada em pormenor na primeira secção do descrição da saída e mais tarde na secçãodas opções sob a explicação de --track, uma vez que é uma linha 1. Bem... uma espécie de 1 linha, porque você teria mesmo assim tem que correr git fetch <remote>} primeiro.

FYI:a ordem do <refspecs> (fonte: Destino) explica o bizarro método pre Git-1.7 para apagar ramificações remotas. IE: não empurre nada para o refspec de destino.

 761
Author: Mark Mikofski, 2017-05-23 12:02:58

Se você está tentando "checkout" um novo ramo remoto( que existe apenas no remoto, mas não localmente), aqui está o que você vai precisar:

git fetch origin
git checkout --track origin/<remote_branch_name>

Isto assume que você quer obter de origem . Caso contrário, substitua a origem pelo seu nomeremoto .

 280
Author: paneer_tikka, 2017-01-06 07:24:54

Para verificar o myBranch que existe remotamente e não localmente-isto funcionou para mim:

git fetch --all
git checkout myBranch
Recebi esta mensagem:
Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'
 89
Author: David, 2013-11-12 03:36:22

Usar git branch -a (tanto os ramos locais como os remotos) ou git branch -r (apenas os ramos remotos) para ver todos os comandos e os seus ramos. Você pode então fazer um git checkout -t remotes/repo/branch para o remoto e criar um ramo local.

Existe também um comando git ls-remote para ver todos os árbitros e tags para esse remoto.

 38
Author: Daniel Lee, 2013-09-25 13:01:32

O Título e a pergunta estão confusos:

  • Git fetch remote branch
  • Como pode o meu colega puxar esse ramo especificamente?

Se a questão é como conseguir que um ramo remoto funcione ou como obter um ramo remoto, uma solução mais simples é:

Com git (>=1, 6) pode utilizar:

git checkout <branch_name>

Se o local <branch_name> não for encontrado, mas existe um ramo de localização em exactamente um remoto com um nome correspondente, tratar como equivalente a:

git checkout -b <branch_name> --track <remote>/<branch_name>

Ver documentação para a obtenção do git

Para o seu amigo:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
 33
Author: Guillaume Vincent, 2014-03-31 10:53:41
git checkout -b serverfix origin/serverfix

Esta é uma operação bastante comum que o git fornece a -- track shorthand:

git checkout --track origin/serverfix
Na verdade, isto é tão comum que até há um atalho para esse atalho. Se o nome do ramo que está a tentar obter (a) não existir e (B) corresponder exactamente a um nome num único remoto, o Git irá criar um ramo de seguimento para si:
git checkout serverfix

Para configurar um ramo local com um nome diferente do ramo remoto, você pode facilmente usar a primeira versão com um local diferente nome do ramo:

git checkout -b sf origin/serverfix

Agora, o seu ramo local sf irá retirar automaticamente do origin / serverfix.

Fonte: Pro Git 2nd Edition, escrito por Scott Chacon e Ben Straub (cut for readability)

 24
Author: ManuelSchneid3r, 2017-09-18 14:13:14

Com este simples comando:

git checkout -b 'your_branch' origin/'remote branch'
 13
Author: Karthik damodara, 2018-02-12 19:13:05
git fetch

git branch -r

git checkout <branch_name>
 12
Author: John Rodriguez, 2013-12-04 21:13:32

Você pode obter e obter o ramo remoto de uma vez também: -

git fetch && git checkout the-branch-name
 11
Author: Kumar Sambhav, 2015-03-25 06:43:02

Eu dactilografei

git checkout <branch_name>

E tenho

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'
 9
Author: Guillaume Guillaume, 2015-04-10 22:43:19

A maneira mais fácil de o fazer, pelo menos para mim:

git fetch origin <branchName>
 9
Author: James Rochabrun, 2017-11-20 01:00:14
Às vezes é-te pedido para não mexeres com o ramo mestre e trabalhares apenas com o ramo remoto (como me pediram). Só precisas do ramo remoto.

Então para clonar o ramo remoto sozinho (sem o mestre), faça isto

git clone url --branch remote_branch_name

Onde, remote_branch_name é o nome do ramo remoto

Por exemplo,

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

Isto irá assegurar-se de que clonará o ramo remoto para o seu ramo local com o nome do ramo remoto.

Agora se você se comprometer o seu código e o seu push, o código será submetido a esse ramo sozinho.

 8
Author: ganezdragon, 2015-02-06 05:11:05

git fetch --all & git checkout <branch name>

 7
Author: Jerome Anthony, 2017-11-20 00:42:13
Digamos que o teu comando é [email protected] e você querem a sua filial random_ Branch. O processo deve ser o seguinte:
  1. Primeiro verifique a lista dos seus comandos por

    git remote -v

  2. Se não tiveres o [email protected] remoto no resultado do comando acima, você adicioná-lo-ia por

    git remote add xyz [email protected]

  3. Agora podes ir buscar o conteúdo do comando

    git fetch xyz

    Agora verifique o branch of that remote by

    git checkout -b my_copy_random_branch xyz/random_branch

  4. Verifique a lista do ramo por

    git branch -a

A ramificação local my_copy_random_branch estaria a seguir a ramificação random_branch do seu remoto.

 4
Author: zafar142003, 2018-03-06 16:59:13

git fetch && git checkout <your friend's branch name> deve resultar.

 4
Author: tambakoo, 2018-04-25 11:37:50

Os passos são os seguintes:

  1. git fetch origin ou git fetch --all, Isto irá obter todos os ramos remotos para o seu local e, em seguida, esta é a segunda opção que você pode procurar.

  2. git checkout --track origin/<The_remote_branch you want to switch over>

Então trabalha neste ramo e podes verificar se estás nesse ramo ou não escrevendo

git branch

Desloca o ramo em que estás actualmente.

 3
Author: Sam, 2013-12-26 10:09:11
Se já conhece o seu ramo remoto assim...
git remote
=> One
=> Two

E sabes o nome do ramo que queres obter ex. br1.2.3.4 então faça

git fetch One
=> returns all meta data of remote i.e. the branch name in question.

Tudo o que resta é verificar o ramo

git checkout br.1.2.3.4

Então faça quaisquer novos ramos dela.

 3
Author: SoEzPz, 2015-06-26 17:51:26

Verifica o teu .git/config, em particular o que o rastreamento está presente em busca para o comando.

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

Se tiver heads/* a apontar para randomRemote/*, quando correres git fetch randomRemote, irá buscar todos os ramos. Então podes ir ver o ramo.

Caso contrário,

  1. Você precisa adicionar ramos remotos ao rastreamento usando isto. Verifique o seu .git/config depois de executar isto. Vais entender. git set-branches remotos -- add randomRemote randomBranch

  2. Corre. Isto irá obter o ramo remoto.

  3. Agora podes fugir.git checkout randomBranch

 2
Author: Vamshi Suram, 2017-02-01 14:29:24

Usa-se o' git pull ' para manter os ramos separados. Usarei os nomes reais do repo e do branch para ajudar já que 'lbranch' e 'rbranch' é difícil de decifrar.

Vamos usar:
  • myteam.unfuddle.com = o Servidor Git remoto
  • tlc = conta do projecto unfuddle onde existe o Acordo de recompra
  • daves_ Branch = nome do ramo remoto

    Você, ou qualquer colega, pode executar isto para puxar apenas o seu ramo, não importa quantos ramos existem:

    git init
    git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
    
  •  1
    Author: Andrew, 2013-05-22 21:10:02

    Tenta simplesmente

    $git puxa a origem do seu_ nome_ branch_

     1
    Author: Rizo, 2017-12-12 20:44:31

    Se você tem um repositório que foi clonado com -- depth 1 Então muitos dos comandos que foram listados não vão funcionar. Por exemplo, veja aqui

    % git clone --depth 1 https://github.com/repo/code
    Cloning into 'code'...
    cd code
    remote: Counting objects: 1778, done.
    remote: Compressing objects: 100% (1105/1105), done.
    remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
    Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
    Resolving deltas: 100% (87/87), done.
    Checking connectivity... done.
    Checking out files: 100% (1215/1215), done.
    % cd code
    % git checkout other_branch
    error: pathspec 'other_branch' did not match any file(s) known to git.
    % git fetch origin other_branch
    remote: Counting objects: 47289, done.
    remote: Compressing objects: 100% (15906/15906), done.
    remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
    Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
    Resolving deltas: 100% (30151/30151), completed with 362 local objects.
    From https://github.com/repo/code
     * branch            other_branch-> FETCH_HEAD
    % git checkout other_branch
    error: pathspec 'other_branch' did not match any file(s) known to git.
    %
    
    Neste caso, eu voltaria a ligar o repo, mas talvez haja outras técnicas, por exemplo, o clone raso git (clone --profundidade) falha os ramos remotos.
     1
    Author: Colin D, 2018-01-24 21:21:03

    Um comando simples - "git checkout remote_branch_name" ajudá-lo-á a criar um ramo local que tenha todas as alterações no ramo remoto.

     0
    Author: SIjeesh Kattumunda, 2018-01-19 12:34:41

    git branch <name> --track origin/<name>

     0
    Author: Chris F Carroll, 2018-03-11 18:02:34
    O que me ajudou foi ...

    1) para ver todos os ramos remotos disponíveis (por exemplo, 'remote-branch-name')

    git branch -r
    

    2) Criar um ramo local usando o nome do ramo remoto

    git fetch && git checkout 'remote-branch-name'
    
     0
    Author: Arlan T, 2018-09-17 02:16:14