ti-enxame.com

Como faço para verificar uma ramificação remota do Git?

Alguém empurrou uma ramificação chamada test com git Push Origin test para um repositório compartilhado. Eu posso ver o ramo com git branch -r.

Agora estou tentando verificar a ramificação test remota.

Eu tentei:

  • git checkout test que não faz nada

  • git checkout Origin/test* (no branch). O que é confuso. Como posso estar em "nenhum ramo"?

Como faço para verificar uma ramificação remota do Git?

6088
Juri Glass

Atualizar

A resposta de Jakub realmente melhora isso. Com versões do Git ≥ 1.6.6, com apenas um controle remoto, você pode apenas fazer:

git fetch
git checkout test

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. Neste caso, use

git checkout -b test <name of remote>/test

ou a taquigrafia

git checkout -t <name of remote>/test

Resposta antiga

Antes que você possa começar a trabalhar localmente em uma ramificação remota, você precisa buscá-la conforme solicitado nas respostas abaixo.

Para buscar um ramo, você simplesmente precisa:

git fetch Origin

Isso irá buscar todos os ramos remotos para você. Você pode ver as filiais disponíveis para finalizar a compra com:

git branch -v -a

Com as filiais remotas em mãos, agora você precisa verificar o ramo em que está interessado, fornecendo uma cópia de trabalho local:

git checkout -b test Origin/test
8411
hallski

Sidenote:Com o moderno Git (> = 1.6.6 ), você pode usar apenas

git checkout test

(note que é 'test' não 'Origin/test') para executar magical DWIM -mery e criar branch local 'test' para você, para o qual upstream seria remote-tracking branch 'Origin/test '.


O * (no branch) na saída git branch significa que você está em uma ramificação sem nome, no chamado estado "HEAD separado" (HEAD aponta diretamente para commit, e não é uma referência simbólica para algum branch local). Se você fez alguns commits nessa ramificação anônima, você sempre pode criar uma ramificação local do commit atual:

git checkout -b test HEAD
1190
Jakub Narębski

Nesse caso, você provavelmente deseja criar uma ramificação test local que esteja rastreando a ramificação test remota:

$ git branch test Origin/test

Em versões anteriores de git, você precisava de uma opção --track explícita, mas esse é o padrão agora quando você está se ramificando de uma ramificação remota.

528
ndim

Aceito responder não está funcionando para você?

Enquanto a primeira e selecionada resposta é tecnicamente correta , existe a possibilidade de você ainda não ter recuperado todos os objetos e referências do repositório remoto. Se esse for o caso, você receberá o seguinte erro:

$ git checkout -b remote_branch Origin/remote_branch

fatal: git checkout: a atualização de caminhos é incompatível com a troca de agências.
Você pretendia fazer o checkout 'Origin/remote_branch', que não pode ser resolvido como commit?

Solução

Se você receber essa mensagem, primeiro faça um git fetch Origin onde Origin é o nome do repositório remoto antes de executar git checkout remote_branch. Aqui está um exemplo completo com respostas:

$ git fetch Origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> Origin/develop
 * [new branch]      demo       -> Origin/demo
   d80f8d7..359eab0  master     -> Origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from Origin.
Switched to a new branch 'demo'

Como você pode ver, a execução de git fetch Origin recuperou todas as ramificações remotas que ainda não foram configuradas para rastrear em nossa máquina local. A partir daí, como agora temos uma ref no ramo remoto, podemos simplesmente executar git checkout remote_branch e obteremos os benefícios do rastreamento remoto.

439
Corey Ballou

Eu tentei a solução acima, mas não funcionou. Tente isso, funciona:

git fetch Origin 'remote_branch':'local_branch_name'

Isso irá 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 ramificação remota nela.

226
Sahil kalra

Isto irá DWIM para um remoto não chamado Origem ( documentation ):

$ git checkout -t remote_name/remote_branch

Para adicionar um novo controle remoto, você precisará fazer o seguinte primeiro:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

O primeiro diz ao Git que o remoto existe, o segundo recebe os commits.

105
tacaswell

Usar:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

Outras respostas não funcionam com o moderno Git no meu caso benigno. Você pode precisar puxar primeiro se o ramo remoto é novo, mas eu não verifiquei esse caso.

100
matanster

OK, a resposta é fácil ... Você basicamente vê o ramo, mas você ainda não tem uma cópia local! ...

Você precisa fetch o ramo ...

Você pode simplesmente buscar e, em seguida, fazer checkout para o ramo, use o comando de uma linha abaixo para fazer isso:

git fetch && git checkout test

Eu também criei a imagem abaixo para você compartilhar as diferenças, veja como fetch funciona e também como ela é diferente de pull:

git fetch

78
Alireza

Para clonar um repositório Git, faça:

git clone <either ssh url /http url>

O comando acima verifica todas as ramificações, mas apenas a ramificação master será inicializada. Se você quiser fazer o checkout dos outros ramos, faça:

git checkout -t Origin/future_branch (for example)

Esse comando faz check-out da ramificação remota e o nome da ramificação local será o mesmo da ramificação remota.

Se você quiser substituir o nome da sua filial local no check-out:

git checkout -t -b enhancement Origin/future_branch

Agora, o nome da sua ramificação local é enhancement, mas o nome da sua ramificação remota é future_branch.

Documentação

52
Madhan Ayyasamy

Podes tentar

git fetch remote
git checkout --track -b local_branch_name Origin/branch_name

ou

git fetch
git checkout -b local_branch_name Origin/branch_name
34
uma

Primeiro você precisa fazer:

git fetch # Se você não sabe sobre o nome da filial

git fetch Origin branch_name

Segundo, você pode verificar o ramo remoto em seu local por:

git checkout -b branch_name Origin/branch_name

-b criará uma nova ramificação no nome especificado a partir da ramificação remota selecionada.

28
Silent Spectator

Comandos

git fetch --all
git checkout -b <ur_new_local_branch_name> Origin/<Remote_Branch_Name>

são iguais a

 git fetch --all

e depois

 git checkout -b fixes_for_dev Origin/development

Ambos criarão um latest fixes_for_dev de development

27
sreekumar

Eu uso o seguinte comando:

git checkout --track Origin/other_remote_branch
25
priyankvex

Se a ramificação estiver em algo diferente do controle remoto Origin, gosto de fazer o seguinte:

$ git fetch
$ git checkout -b second/next upstream/next

Isso fará o checkout da ramificação next no remoto upstream em uma ramificação local chamada second/next. O que significa que se você já tem um branch local chamado next ele não entrará em conflito.

$ git branch -a
* second/next
  remotes/Origin/next
  remotes/upstream/next
23
Kris

git branch -r diz que o nome do objeto é inválido, porque esse nome de ramificação não está na lista de ramificação local do Git. Atualize sua lista de ramificações locais da Origin com:

git remote update

E tente verificar sua ramificação remota novamente.

Isso funcionou para mim.

Eu acredito que git fetch puxa em all branches remotos, o que não é o que o pôster original queria.

16
webdevguy

nenhuma dessas respostas funcionou para mim. isso funcionou:

git checkout -b feature/branch remotes/Origin/feature/branch

15
brianyang

git fetch && git checkout your-branch-name

15
Inder Kumar Rathore

Basta executar git checkout com o nome do ramo remoto. O Git irá criar automaticamente um ramo local que rastreia o remoto:

git fetch
git checkout test

No entanto, se esse nome de ramificação 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:

git checkout --track Origin/test

ou

git checkout -b test Origin/test

Em 2.19 , o Git aprendeu o checkout.defaultRemote configuration, que especifica um remoto para o padrão ao resolver tal ambiguidade.

13
Eugene Yarmash

Eu estava preso em uma situação vendo error: pathspec 'desired-branch' did not match any file(s) known to git. para todas as sugestões acima. Eu estou no git versão 1.8.3.1.

Então este funcionou para mim :

git fetch Origin desired-branch
git checkout -b desired-branch FETCH_HEAD

A explicação por trás disso é que notei que ao buscar a ramificação remota, ela foi buscada para FETCH_HEAD:

$ git fetch Origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD
13
alisa

O comando git remote show <Origin name> listará todas as ramificações (incluindo ramificações não rastreadas). Então você pode encontrar o nome da ramificação remota que você precisa buscar.

Exemplo:

$ git remote show Origin

Use estas etapas para buscar ramificações remotas:

git fetch <Origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

Exemplo:

$ git fetch Origin test:test
$ git checkout test
10
Thushan

Outros caras e moças dão as soluções, mas talvez eu possa lhe dizer o porquê.

teste de checkout git que não faz nada

Does nothing não é igual a doesn't work, então eu 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 dizer-lhe a causa.

A causa é que existe um arquivo (ou pasta) chamado 'teste' na sua árvore de trabalho.

Quando git checkout xxx analisado,

  1. Git examina xxx como um nome de ramificação no início, mas não há nenhuma ramificação chamada test.
  2. Então o Git acha que xxx é um caminho e, felizmente (ou infelizmente), existe um arquivo chamado test. Então git checkout xxx significa descartar qualquer modificação no arquivo xxx.
  3. Se não houver um arquivo chamado xxx, o Git tentará criar a xxx de acordo com algumas regras. Uma das regras é criar uma ramificação chamada xxx se remotes/Origin/xxx existir.
8
oldman

Para obter ramificações recém-criadas

git fetch

Para mudar para outro ramo

git checkout BranchName
7
Hasib Kamal

Você pode começar a rastrear todas as ramificações remotas com o seguinte script Bash:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/Origin\///'`
  do git branch -f --track "$branch" "Origin/$branch"
done

Aqui está também uma versão de linha única:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/Origin\///'`; do git branch --track "$branch" "Origin/$branch" ; done ;
6
OzzyCzech

Buscar do controle remoto e verificar o ramo.

git fetch <remote_name> && git checkout <branch_name> 

Por exemplo.:

busca do git Origem && git checkout/XYZ-1234-Add-alerts

6
Pranav

Se o nome da ramificação remota começar com caracteres especiais, você precisará usar aspas simples ao redor dele no comando checkout, ou então o git não saberá de qual ramificação você está falando.

Por exemplo, tentei fazer o checkout de um ramo remoto chamado #9773, mas o comando não funcionou corretamente, como mostra a figura abaixo:

 enter image description here

Por alguma razão eu me perguntei se o símbolo nítido (#) poderia ter algo a ver com isso, e então eu tentei cercar o nome da ramificação com aspas simples, como '#9773' rathen do que apenas #9773, e funcionou bem.

$ git checkout -b '#9773' Origin/'#9773'
1
Ulysses Alves

Por favor, siga o comando para criar uma pasta vazia. Digite isso e use este comando:

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from Origin.
Switched to a new branch '1_4_0_content_discovery'
1
Mehedi Hasan