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
dá * (no branch)
. O que é confuso. Como posso estar em "nenhum ramo"?
Como faço para verificar uma ramificação remota do Git?
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
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
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
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.
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?
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.
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.
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.
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.
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
:
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
.
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
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.
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
Eu uso o seguinte comando:
git checkout --track Origin/other_remote_branch
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
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.
nenhuma dessas respostas funcionou para mim. isso funcionou:
git checkout -b feature/branch remotes/Origin/feature/branch
git fetch && git checkout your-branch-name
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.
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
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
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,
xxx
como um nome de ramificação no início, mas não há nenhuma ramificação chamada test.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
.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.Para obter ramificações recém-criadas
git fetch
Para mudar para outro ramo
git checkout BranchName
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 ;
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
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:
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'
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'