Alguém empurrou um ramo chamado test
com git push origin test
a um repositório compartilhado. Eu posso ver o ramo com git branch -r
.
Agora estou tentando verificar o test
ramo remoto .
Eu tentei:
git checkout test
que não faz nadagit checkout origin/test
dá* (no branch)
. O que é confuso. Como posso estar no "sem ramificação"?
Como faço para verificar uma ramificação remota do Git?
git
git-checkout
remote-branch
Juri Glass
fonte
fonte
upstream
, e não apenasorigin
, e todas as respostas recomendadas não fazem nada remotamente útil (com trocadilhos). EDIT - com licença, as inúmeras sugestões contidas nas 2 principais respostas foram inúteis; O terceiro (git branch test origin/test
) é o que funciona. Ainda bem que o top 2 tem 20x o número de votos ...Respostas:
Atualizar
A resposta de Jakub realmente melhora isso. Nas versões Git ≥ 1.6.6, com apenas um controle remoto, você pode apenas fazer:
Como o usuário masukomi aponta em um comentário,
git checkout test
NÃO funcionará no git moderno se você tiver vários controles remotos. Nesse caso, useou a taquigrafia
Resposta antiga
Antes de começar a trabalhar localmente em uma ramificação remota, é necessário buscá-lo conforme descrito nas respostas abaixo.
Para buscar uma ramificação, basta:
Isso buscará todas as ramificações remotas para você. Você pode ver as agências disponíveis para checkout com:
Com as filiais remotas em mãos, agora você precisa verificar a filial em que está interessado, fornecendo uma cópia de trabalho local:
fonte
git fetch
antes de fazer isso, para que o git esteja ciente deorigin/test
git fetch origin test
origin/test
que não pode ser resolvido como confirmação?"git checkout test
NÃO funcionará no git moderno se você tiver vários controles remotos com o mesmo nome de ramificação . Não pode saber qual usar.Nota: Com o moderno Git (> = 1.6.6 ), você pode usar apenas
(observe que é 'teste' e não 'origem / teste') executar uma mágica mágica de DWIM e criar um 'teste' de ramificação local para você, para o qual upstream seria 'origem / teste' de ramificação de rastreamento remoto.
A saída
* (no branch)
ingit branch
significa que você está em uma ramificação sem nome, no chamado estado "desanexado HEAD" (HEAD aponta diretamente para confirmação, e não é uma referência simbólica a alguma ramificação local). Se você fez algumas confirmações nesta ramificação sem nome, sempre pode criar ramificação local com a confirmação atual:** EDIT (pelo editor, não autor) **
Encontrei um comentário enterrado abaixo, que parece modernizar esta resposta:
ênfase em
git checkout origin/test
fonte
error: pathspec 'branch_name' did not match any file(s) known to git.
, deve primeiro buscar o git.Nesse caso, você provavelmente deseja criar uma
test
filial local que esteja rastreando atest
filial remota :Nas versões anteriores
git
, você precisava de uma--track
opção explícita , mas esse é o padrão agora quando você está ramificando uma ramificação remota.fonte
A resposta aceita não está funcionando para você?
Embora a primeira resposta selecionada seja tecnicamente correta , existe a possibilidade de você ainda não ter recuperado todos os objetos e referências do repositório remoto. Se for esse o caso, você receberá o seguinte erro:
Solução
Se você receber esta mensagem, primeiro faça um
git fetch origin
where ondeorigin
é o nome do repositório remoto antes da execuçãogit checkout remote_branch
. Aqui está um exemplo completo com respostas:Como você pode ver, a execução
git fetch origin
recuperou quaisquer ramificações remotas que ainda não estavam configuradas para rastrear em nossa máquina local. A partir daí, como agora temos uma referência ao ramo remoto, podemos simplesmente executargit checkout remote_branch
e obteremos os benefícios do rastreamento remoto.fonte
git checkout -b newbranch
também funciona muito bem para criar e fazer checkout em uma única etapa uma nova filial com base na filial atual.git ls-remote
e a única maneira de realmente usar uma égit checkout -b [branch] --track [remote/branch]
... e isso depois dogit pull [remote] [branch]
trabalho. Ou seja, ele realmente puxou o ramo inteiro, mas ainda não o listou.git fetch other_remote only_branch
, você ainda receber ofatal
erro. Você precisagit fetch other_remote
sem o nome da filial. Design estranho.Eu tentei a solução acima, mas não funcionou. Tente isso, funciona:
Isso buscará a ramificação remota e criará uma nova ramificação local (se já não existir) com o nome
local_branch_name
e rastreará a remota nela.fonte
Isso fará o DWIM para uma origem remota não nomeada ( documentação ):
Para adicionar um novo controle remoto, faça o seguinte primeiro:
O primeiro diz ao Git que o controle remoto existe, o segundo recebe os commits.
fonte
Usar:
Outras respostas não funcionam com o Git moderno no meu caso benigno. Pode ser necessário puxar primeiro se o ramo remoto for novo, mas eu não verifiquei esse caso.
fonte
OK , a resposta é fácil ... Você basicamente vê a filial, mas ainda não possui uma cópia local! ...
Você precisa
fetch
do ramo ...Você pode simplesmente buscar e, em seguida, efetuar o checkout no ramo, use o comando de uma linha abaixo para fazer isso:
Também criei a imagem abaixo para você compartilhar as diferenças, ver como
fetch
funciona e também como é diferentepull
:fonte
test
parece um novo ramo, portanto não é provável que esteja presente localmente. Caso contrário, você poderia facilitar o processo com um únicogit pull
comando.fetch
, sempull
mudanças deixam na cópia buscada, mas não na filial local, levando a sua filial local não sendo up-to-date?Para clonar um repositório Git, faça:
O comando acima faz check-out de todas as ramificações, mas somente a
master
ramificação será inicializada. Se você quiser fazer check-out dos outros ramos, faça:Este comando faz check-out da filial remota e o nome da sua filial local será o mesmo da filial remota.
Se você deseja substituir o nome da sua filial local na finalização da compra:
Agora, o nome da sua filial local é
enhancement
, mas o nome da sua filial remota éfuture_branch
.Documentação
fonte
master
, isso não funcionará.Podes tentar
ou
fonte
--track
não é mais necessário nas versões mais recentes do git, porque é definido por padrão, conforme explicado nesta resposta anterior .Primeiro, você precisa fazer:
git fetch
# Se você não souber o nome da filialSegundo, você pode verificar a filial remota no seu local:
-b
criará uma nova ramificação no nome especificado a partir da ramificação remota selecionada.fonte
Eu uso o seguinte comando:
fonte
Comandos
são iguais a
e depois
Ambos criarão um
latest fixes_for_dev
dedevelopment
fonte
Se a ramificação estiver em algo diferente do
origin
controle remoto, eu gosto de fazer o seguinte:Isso fará o checkout da
next
filial noupstream
controle remoto para uma filial local chamadasecond/next
. O que significa que, se você já tiver um ramo local chamado next, ele não entrará em conflito.fonte
git fetch && git checkout your-branch-name
fonte
nenhuma dessas respostas funcionou para mim. isso funcionou:
git checkout -b feature/branch remotes/origin/feature/branch
fonte
git
ao chamar ogit branch -a
comando, mas não tinha certeza, então useigit checkout -b apps/FEATURE/branch origin/apps/FEATURE/branch
e ele pareceu funcionar. Mensagem:Branch 'apps/FEATURE/branch' set up to track remote branch 'apps/FEATURE/epicBranch' from 'origin'. Switched to a new branch 'apps/FEATURE/branch'
Eu estava preso em uma situação vendo
error: pathspec 'desired-branch' did not match any file(s) known to git.
todas as sugestões acima. Estou no git versão 1.8.3.1.Então, isso funcionou para mim :
A explicação por trás disso é que notei que, ao buscar a ramificação remota, ela foi buscada em FETCH_HEAD:
fonte
Simplesmente execute
git checkout
com o nome da ramificação remota. O Git criará automaticamente uma ramificação local que rastreia a ramificação remota:No entanto, se esse nome de filial for encontrado em mais de um controle remoto, isso não funcionará, pois o Git não sabe qual usar. Nesse caso, você pode usar:
ou
Na 2.19 , o Git aprendeu a
checkout.defaultRemote
configuração, que especifica um controle remoto para o padrão ao resolver essa ambiguidade.fonte
git branch -r
diz que o nome do objeto é inválido, porque esse nome não está na lista de ramificações locais do Git. Atualize sua lista de agências locais da origem com:E tente verificar novamente sua ramificação remota.
Isso funcionou para mim.
Acredito que
git fetch
atrai todos os ramos remotos, o que não é o que o pôster original queria.fonte
git remote update
também buscará todas as ramificações remotas .O
git remote show <origin name>
comando listará todas as ramificações (incluindo ramificações não rastreadas). Em seguida, você pode encontrar o nome da filial remota que precisa buscar.Exemplo:
Siga estas etapas para buscar ramificações remotas:
Exemplo:
fonte
$ git clone -b release --single-branch --depth 5 https://github.com/user/repo.git
informações$ git remote show origin
não gravadas, isso não listou todas as ramificações remotas com repositórios clonados de ramificação única.Busque no controle remoto e faça o checkout da filial.
Por exemplo:
fonte
Outros caras e moças dão as soluções, mas talvez eu possa lhe dizer o porquê.
Does nothing
não é igualdoesn't work
, então acho que quando você digita 'git checkout test' no seu terminal e pressiona a tecla Enter, nenhuma mensagem aparece e nenhum erro ocorre. Estou certo?Se a resposta for sim, posso lhe dizer a causa.
A causa é que existe um arquivo (ou pasta) chamado 'teste' na sua árvore de trabalho.
Quando
git checkout xxx
analisado,xxx
como um nome de filial no início, mas não existe nenhuma filial chamada teste.xxx
é um caminho e, felizmente (ou infelizmente), existe um arquivo chamado test. Então,git checkout xxx
significa descartar qualquer modificação noxxx
arquivo.xxx
, o Git tentará criar oxxx
acordo com algumas regras. Uma das regras é criar um ramo nomeadoxxx
seremotes/origin/xxx
existir.fonte
Para obter ramificações criadas recentemente
Para mudar para outro ramo
fonte
Você pode começar a rastrear todas as ramificações remotas com o seguinte script Bash:
Aqui também está uma versão de linha única:
fonte
git checkout -b "Branch_name" [B significa Criar ramificação local]
git branch --all
git checkout -b "O nome da sua filial"
ramo git
saída com êxito da ramificação mestre para a ramificação dev
fonte
para obter todas as ramificações remotas, use isto:
depois faça o checkout para a filial:
fonte
Use
fetch
para puxar todo o seu controle remotoPara listar ramificações remotas:
Para listar todas as suas filiais
Para fazer checkout / alterar uma filial
fonte
git branch -l
e nenhum ramo remoto foi mostrado.git pull --all
orgit fetch --all
git branch -l
ainda mostra apenas filiais locais . Parece estar funcionando exatamente comogit branch
fora-l
, então qual é o motivo-l
?master
não é um ramo remoto.-l
sinalizador para lista. Você pode usar--list
tambémPara nós, parece que a
remote.origin.fetch
configuração deu um problema. Portanto, não conseguimos ver outras ramificações remotasmaster
, portantogit fetch [--all]
, não ajudamos. Nemgit checkout mybranch
nemgit checkout -b mybranch --track origin/mybranch
fez trabalho, embora certamente estava no remoto.A configuração anterior só pode
master
ser buscada:Corrija-o usando
*
e busque as novas informações de origem:Agora nós poderíamos
git checkout
o ramo remoto localmente.Não faço ideia de como essa configuração acabou em nosso repositório local.
fonte
Se o nome do ramo remoto começar com caracteres especiais, você precisará usar aspas simples no comando checkout, caso contrário, o git não saberá de qual ramo você está falando.
Por exemplo, tentei fazer check-out de uma ramificação remota chamada como,
#9773
mas o comando não funcionou corretamente, conforme mostrado na figura abaixo:Por alguma razão, me perguntei se o símbolo afiado (#) poderia ter algo a ver com isso, e então tentei
'#9773'
colocar o nome do ramo entre aspas simples, como uma pena do que simplesmente#9773
, e felizmente funcionou bem.fonte
#
personagem é usado para comentários, então qualquer coisa após o#
será ignorado. Isso é algo do tipo shell e não algo específico do git. Usar aspas de uma barra invertida antes da#
deve ser suficiente.Por favor, siga o comando para criar uma pasta vazia. Digite isso e use este comando:
fonte