Meu colega e eu estamos trabalhando no mesmo repositório. Nós o ramificamos em dois ramos, cada um tecnicamente para projetos diferentes, mas eles têm semelhanças, portanto, às vezes, queremos voltar ao * master
do branch
.
No entanto, eu tenho o branch
. Como meu colega consegue esse ramo especificamente?
Um git clone
dos repositórios não parece criar as ramificações localmente para ele, embora eu possa vê-las viver sem problemas depois de um empurrão do meu lado.
Além disso, quando eu fiz o ramo originalmente, fiz -b checkout
. Isso faz muita diferença?
$ 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 corri. Mas definitivamente não está funcionando.
Quero poder verificar essa ramificação e, em seguida, enviar e confirmar novamente as alterações das ramificações de vários colaboradores ou estações de trabalho .
fonte
git fetch --all
Então, para visualizar todos os ramos:,git branch
Então eu fiz o checkout do ramo:git checkout nameofnewbranch
git fetch origin discover:discover && git checkout discover
Respostas:
Você precisa criar uma filial local que rastreie uma filial remota. O comando a seguir criará uma ramificação local chamada daves_branch , rastreando a origem da ramificação remota / daves_branch . Quando você envia suas alterações, a ramificação remota será atualizada.
Para as versões mais recentes do Git:
--track
é uma abreviação degit checkout -b [branch] [remotename]/[branch]
onde [remotename] é a origem neste caso e [branch] é duas vezes o mesmo, daves_branch nesse caso.Para o Git 1.5.6.5, você precisava disso:
Para o Git 1.7.2.3 e superior, isso é suficiente (pode ter sido iniciado mais cedo, mas esta é a confirmação mais antiga que pude encontrar rapidamente):
Observe que nas versões recentes do Git, este comando não cria uma ramificação local e coloca você no estado 'desanexado HEAD'. Se você deseja uma filial local, use a
--track
opçãoDetalhes completos estão aqui: Ramificação 3.5 Git - Ramificações remotas, ramificações de rastreamento
fonte
git checkout -b --track daves_branch origin/daves_branch
Eu usei
fetch
seguido porcheckout
...... onde
<rbranch>
está a filial remota ou referência de origem e<lbranch>
é a filial local ou referência de destino ainda inexistente que você deseja rastrear e que provavelmente deseja nomear o mesmo nome que filial remota ou referência de origem. Isso é explicado em opções na explicação de .<refspec>
O Git é tão inteligente que conclui automaticamente o primeiro comando se eu tabular após as primeiras letras da ramificação remota. Ou seja, nem preciso nomear o ramo local, o Git copia automaticamente o nome do ramo remoto para mim. Obrigado Git!
Além disso, como mostra a resposta nesta postagem similar do Stack Overflow , se você não nomear a ramificação local
fetch
, ainda poderá criá-la quando fizer check-out usando o-b
sinalizador. Ou seja,git fetch <remote> <branch>
seguido porgit checkout -b <branch> <remote>/<branch>
faz exatamente o mesmo que a minha resposta inicial. E, evidentemente, se o seu repositório tiver apenas um controle remoto, você poderá fazer issogit checkout <branch>
depoisfetch
e ele criará uma ramificação local para você. Por exemplo, você acabou de clonar um repositório e deseja verificar ramificações adicionais no controle remoto.Acredito que parte da documentação do
fetch
pode ter sido copiada literalmentepull
. Em particular, a seção<refspec>
em opções é a mesma. No entanto, eu não acredito quefetch
isso nuncamerge
, portanto, se você deixar o lado do cólon de destino vazio,fetch
não deverá fazer nada .NOTA:
git fetch <remote> <refspec>
é uma abreviaçãogit fetch <remote> <refspec>:
que, portanto, não faria nada, masgit fetch <remote> <tag>
é a mesmagit fetch <remote> <tag>:<tag>
que deve copiar o controle remoto<tag>
localmente.Eu acho que isso só é útil se você deseja copiar uma filial remota localmente, mas não necessariamente verificá-la imediatamente. Caso contrário, agora eu usaria a resposta aceita , que é explicada em detalhes na primeira seção da descrição do checkout e mais tarde na seção de opções na explicação de
--track
, uma vez que é uma linha única. Bem ... uma espécie de one-liner, porque você ainda teria que corrergit fetch <remote>
primeiro.FYI: A ordem do
<refspecs>
(origem: destino) explica o bizarro método anterior ao Git 1.7 para excluir ramificações remotas . Ou seja, não introduza nada no refspec de destino.fonte
git fetch remote branch
não adicionei uma cabeça de ramificação para mim, embora todos os árbitros tenham sido buscados; portanto, quando tentei seguir as etapas da resposta aceita, recebi o erro de quepathspec did not match any file(s) known to git.
, mas arbranch:lbranch
abordagem funcionou. Curiosamente, ele também buscou todas as tags que começaram com o mesmo prefixo, como se fosse um curinga (rbranch*
).fetch
comando. É a resposta aceita faz sentido, porque OP observa que ele já fez a busca. Essa é pelo menos a questão em que me deparei.Se você estiver tentando "efetuar checkout" de uma nova ramificação remota (que existe apenas no controle remoto, mas não localmente), eis o que você precisará:
Isso pressupõe que você deseja buscar da origem . Caso contrário, substitua a origem pelo seu nome remoto .
fonte
git fetch
egit fetch remote
fará a mesma coisa. Se você precisar buscar a partir de um controle remoto diferenteorigin
, poderá fazer isso usandogit fetch <other_remote_name>
. Esta situação é altamente incomum, apenas mencionada aqui para ser completo.Para fazer o checkout do myBranch que existe remotamente e não localmente - Isso funcionou para mim:
Eu recebi esta mensagem:
fonte
-t
?-t
obtê-lo,You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.
porque não havia um ramo local com o mesmo nome. Eu tive que voltar a correr-t
para consertar.checkout
para criá-lo. Obrigado!--all
nunca é uma boa ideia, porque fará o download de todos os arquivos em todos os ramos. Vai levar mais tempo e espaço. É melhor ser específico com o nome da ramificação e faça como esteUse
git branch -a
(ramificações locais e remotas) ougit branch -r
(apenas ramificações remotas) para ver todos os controles remotos e suas ramificações. Você pode fazer umgit checkout -t remotes/repo/branch
no controle remoto e criar uma filial local.Há também um comando git-ls-remote para ver todas as referências e tags desse remoto.
fonte
git checkout remotes/repo/branch
faz com que o git checkout procure um pathspec, não um repositório remoto.O título e a pergunta estão confusos:
Se a pergunta for: como posso trabalhar com uma filial remota ou como posso fazer o Git com uma filial remota? , uma solução mais simples é:
Com o Git (> = 1.6.6), você pode usar:
Se local
<branch_name>
não for encontrado, mas existir um ramo de rastreamento em exatamente um controle remoto com um nome correspondente, trate-o como equivalente a:Consulte a documentação do check-out do Git
Para seu amigo:
fonte
A maneira mais fácil de fazer isso, pelo menos para mim:
fonte
fetch
comando, a ramificação necessária estará disponível na máquina local.git checkout -b 'your_branch' origin/'remote branch'
é necessário para efetuar o checkout deste ramo.Usar:
Esta é uma operação bastante comum que o Git fornece a
--track
abreviação:De fato, isso é tão comum que existe até um atalho para esse atalho. Se o nome do ramo que você está tentando fazer checkout (a) não existir e (b) corresponder exatamente a um nome em apenas um controle remoto, o Git criará um ramo de rastreamento para você:
Para configurar uma filial local com um nome diferente da filial remota, você pode facilmente usar a primeira versão com um nome diferente de filial local:
Agora, sua filial local
sf
será automaticamente retiradaorigin/serverfix
.Fonte: Pro Git, 2ª Edição , escrito por Scott Chacon e Ben Straub (corte para facilitar a leitura)
fonte
Com este comando simples:
fonte
Para buscar uma ramificação que existe no controle remoto, a maneira mais simples é:
Você pode ver se ele já existe no controle remoto com:
Isso buscará a ramificação remota no seu local e rastreará automaticamente a ramificação remota.
fonte
O que me ajudou foi
1) Para visualizar todas as filiais remotas disponíveis (por exemplo, 'nome da filial remota')
2) Crie uma filial local usando o nome da filial remota
fonte
git push
sem outros argumentos? É o ramo local nomeadoremote-branch-name
associado automaticamente (rastreando para) o ramo remoto nomeadoorigin/remote-branch-name
. Ou você precisa executargit push -u origin remote-branch-name
Você também pode buscar e fazer check-out da ramificação remota de uma só vez:
fonte
fonte
Eu digitei
e pegou
fonte
git checkout -b <branch_name> --track <remote>/<branch_name>
Às vezes, você é solicitado a não mexer com o ramo mestre e trabalhar apenas com o ramo remoto (como me pediram). Então, tudo que você precisa é da ramificação remota.
Portanto, para clonar a ramificação remota sozinha (sem o mestre), faça isso
em que remote_branch_name é o nome da ramificação remota
Por exemplo,
Isso garantirá que você clone a ramificação remota na ramificação local com o nome da ramificação remota.
Agora, se você confirmar seu código e enviar por push, o código será enviado apenas para esse ramo.
fonte
[Resposta rápida]
Existem muitas alternativas, e meus favoritos são:
- Alternativa 1:
- Alternativa 2:
fonte
Digamos que seu controle remoto seja [email protected] e você queira a ramificação random_branch. O processo deve ser o seguinte:
Primeiro verifique a lista de seus controles remotos
Se você não possui o controle remoto [email protected] na saída do comando acima, adicione-o
O ramo local my_copy_random_branch rastreará o ramo random_branch do seu controle remoto.
fonte
git fetch --all & git checkout <branch name>
fonte
git fetch && git checkout <your friend's branch name>
deve fazer o truquefonte
Desejo fornecer um comando de uma linha para buscar todas as ramificações remotas no local e alternar para a ramificação local recém-criada desejada:
Depois de executar o comando acima, você receberá a mensagem abaixo:
A primeira linha indica que mudou para uma nova ramificação - por que novo? Já está lá no controle remoto!
Mas, na verdade, você também deve criá-lo localmente. A ramificação é obtida do índice remoto e criada localmente para você.
Aqui
discover
está um novo ramo que foi criado a partir do ramo remoto do seu repositóriodiscover
.Mas a segunda linha fornece mais informações do que a primeira que nos diz que:
Nossa filial é configurada para rastrear ramificações remotas com o mesmo nome.
Embora
git fetch
busque todas as filiais no local. Mas se você corrergit branch
atrás dele, verá apenasmaster
ramificações no local. Por que ?Porque para cada ramo que você tem no controle remoto, você também deve criá-lo localmente, para segui-lo como
git checkout <branchname>
fizemos no exemplo acima.Após executar o
git checkout
comando, você pode executargit branch
e agora pode ver o ramo:fonte
Se você deseja buscar todas as ramificações remotas, digite apenas:
fonte
Simplesmente tente:
fonte
Se você tiver um repositório que foi clonado
--depth 1
, muitos dos comandos listados não funcionarão. Por exemplo, veja aquiNesse caso, eu reclona o repositório, mas talvez haja outras técnicas, por exemplo, git shallow clone (clone --thpth) perde ramificações remotas
fonte
Se você já conhece seu ramo remoto dessa forma ...
e você sabe o nome da filial que deseja fazer o checkout, por exemplo, br1.2.3.4 , e faça
Tudo o que resta é fazer o checkout da filial
Em seguida, faça novas ramificações com ele.
fonte
Os passos são os seguintes;
git fetch origin
ougit fetch --all
, isso buscará todas as ramificações remotas no seu local e, em seguida, será a segunda opção com a qual você poderá proceder.git checkout --track origin/<The_remote_branch you want to switch over>
Em seguida, trabalhe neste ramo e você poderá verificar se está ou não nesse ramo, digitando
Ele exibe a filial em que você está atualmente.
fonte
git branch <name> --track origin/<name>
fonte
Verifique seu
.git/config
arquivo, principalmente o rastreamento presente na busca desse controle remoto.Se estiver
heads/*
apontando pararandomRemote/*
, quando você executargit fetch randomRemote
, buscará todas as ramificações.Então você pode apenas fazer checkout desse ramo.
De outra forma,
Você precisa adicionar ramificações remotas ao rastreamento usando isso. Verifique o seu
.git/config
depois de executar isso. Você vai entender.Corra
git fetch randomRemote
. Isso buscará a ramificação remota.Agora você pode correr
git checkout randomBranch
.fonte
Você usa 'git pull' para manter seus galhos separados. Usarei os nomes reais do repositório e da ramificação para ajudar, pois é difícil decifrar 'lbranch' e 'rbranch'.
Vamos usar:
Você ou qualquer colega pode executar isso para puxar apenas sua ramificação, não importa quantas ramificações existem:
fonte
Um comando simples,
git checkout remote_branch_name
ajudará você a criar uma filial local que possua todas as alterações na filial remota.fonte
fonte