Git obter ramo remoto
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.
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
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.
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.
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 .
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'
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.
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'
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)
Com este simples comando:
git checkout -b 'your_branch' origin/'remote branch'
git fetch
git branch -r
git checkout <branch_name>
Você pode obter e obter o ramo remoto de uma vez também: -
git fetch && git checkout the-branch-name
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>'
A maneira mais fácil de o fazer, pelo menos para mim:
git fetch origin <branchName>
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.
git fetch --all & git checkout <branch name>
-
Primeiro verifique a lista dos seus comandos por
git remote -v
-
Se não tiveres o [email protected] remoto no resultado do comando acima, você adicioná-lo-ia por
git remote add xyz [email protected]
Agora podes ir buscar o conteúdo do comando
- Verifique a lista do ramo por
git branch -a
Agora verifique o branch of that remote by
git fetch xyz
git checkout -b my_copy_random_branch xyz/random_branch
A ramificação local my_copy_random_branch estaria a seguir a ramificação random_branch do seu remoto.
git fetch && git checkout <your friend's branch name>
deve resultar.
Os passos são os seguintes:
git fetch origin
ougit 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.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.
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.
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,
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 randomBranchCorre. Isto irá obter o ramo remoto.
Agora podes fugir.
git checkout randomBranch
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: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
Tenta simplesmente
$git puxa a origem do seu_ nome_ branch_
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.
Um comando simples - "git checkout remote_branch_name" ajudá-lo-á a criar um ramo local que tenha todas as alterações no ramo remoto.
git branch <name> --track origin/<name>
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'