"Não é possível atualizar caminhos e alternar para ramificação ao mesmo tempo"

186

Às vezes, uso a checkout -bopção para criar uma nova ramificação, verificá-la ao mesmo tempo e configurar o rastreamento em um comando.

Em um novo ambiente, recebo este erro:

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

Por que o Git não gosta? Isso costumava funcionar com o mesmo repositório.

marekful
fonte
6
A mensagem de erro está informando que origin/masternão é um ID de confirmação, ou seja, não é um ramo remoto válido. Ele aparece na git branch -rsaída?
Torek
Isso não aconteceu. Acontece que eu não verifiquei todas as ramificações remotas durante o clone.
precisa saber é o seguinte
possível duplicata de git checkout em uma filial remota não funciona
JuJoDi

Respostas:

199

' origin/master' que não pode ser resolvido como confirmação

Estranho: você precisa verificar seus controles remotos:

git remote -v

E verifique se originestá sendo buscado:

git fetch origin

Então:

git branch -avv

(para ver se você buscou um origin/masterramo)

Por fim, use em git switchvez de confusogit checkout , com o Git 2.23+ (agosto de 2019).

git switch -c test --track origin/master
VonC
fonte
11
Eu tive um erro de digitação no meu comando que acionou esse erro; Eu não estava soletrando meu controle remoto corretamente!
Qix
2
Era um novo ramo e meu repositório local não sabia disso. Eu tive que fazer um pulle então este comando funcionou.
Codigo_idiot 17/11
2
Essa resposta foi útil porque me mostrou que há realmente algo estranho acontecendo: os controles remotos estão definidos corretamente, mas a nova ramificação remota simplesmente não é buscada. Quando clono o controle remoto em um diretório limpo, ele funciona. Meu .gitdiretório poderia estar de alguma forma corrompido?
Konrad Rudolph
O git remote -v retornou este erro fatal: Não é um nome de objeto válido: 'remote'.
Karim Samir
@KarimSamir, você pode fazer uma pergunta separada (com seu SO e versão git), conforme git remote -vexecutado em um repositório git funciona.
VonC
79

FWIW: Se você tiver um erro de digitação no nome da sua filial, receberá o mesmo erro.

Ludder
fonte
4
Na verdade, seria bom se alguém pudesse ter o tempo para dizer desenvolvedores Git sobre isso, a mensagem de erro não é muito informativo;)
Scorchio
8
sim, este era o meu problema, eu tinha um espaço no meu nome de filial
Karim Samir
Mesmo aqui, eu estava tentando git checkout -b origin mybranch, em vez de git checkout -b mybranch(extra origin)
Guillaume Renoult
Copiei o nome do meu ramo e tinha espaços em branco após o nome do ramo que causou esse erro.
learningKnight
Eu estava tentando fazer o checkout em orgin/my-branchvez de origin/my-branch. Perdi um ie fiquei coçando a cabeça por um tempo para entender por que um velho aliado está se recusando a se dar bem. Erro de digitação foi realmente o problema.
DDM
55

Você pode obter esse erro no contexto de, por exemplo, uma construção Travis que, por padrão, faz check-out do código git clone --depth=50 --branch=master. Que eu saiba, você pode controlar --depthvia, .travis.ymlmas não a --branch. Como isso resulta em apenas uma única ramificação sendo rastreada pelo controle remoto, você precisa atualizar independentemente o controle remoto para rastrear as referências do controle desejado.

Antes:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

O conserto:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

Depois de:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master
Bob Aman
fonte
5
Resolvi isso para mim. Eu usei um clone - profundidade = 1 raso e é isso que eu precisava para alternar ramos.
Sawtaytoes 23/12/2015
1
Ah, sim, a coisa da profundidade definitivamente resulta nesse erro! Se possível, sugiro que as primeiras frases sejam editadas para enfatizar a profundidade.
Dubslow
19

Essa coisa simples funcionou para mim!

Se disser que não pode fazer duas coisas ao mesmo tempo, separe-as.

git branch branch_name origin/branch_name 

git checkout branch_name
Ashwini Reddy
fonte
Torna mais fácil para descobrir o que o verdadeiro problema é
Z. Khullah
9

Você pode seguir estas etapas quando se deparar com esse problema:

  1. Execute o seguinte comando para listar as ramificações conhecidas pelo seu repositório local.

origem remota da mostra do git

que gera isso:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. Depois de verificar os detalhes como (buscar URL, etc), execute este comando para buscar qualquer nova ramificação (por exemplo, que você pode fazer checkout no seu repositório local) que existe no controle remoto, mas não no seu local.
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

Como você pode ver, a nova ramificação foi buscada remotamente.
3. Finalmente, faça o checkout da ramificação com este comando

» git checkout -b Feature3 origin/Feature3

Branch Feature3 set up to track remote branch Feature3 from origin.
Switched to a new branch 'Feature3'

Não é necessário dizer explicitamente ao Git para rastrear (usando --track ) o ramo com controle remoto.

O comando acima definirá a ramificação local para rastrear a ramificação remota desde a origem.

ssasi
fonte
4

Se houver espaço em branco no seu ramo, você receberá esse erro.

dansek
fonte
1

Para mim, eu precisava adicionar o controle remoto:

git remote -add myRemoteName('origin' in your case) remoteGitURL

então eu poderia buscar

git fetch myRemoteName
RayLoveless
fonte
1

Isso faz com que sua filial local não rastreie a filial remota. Como o ssasi disse, você precisa usar estes comandos:

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

Eu resolvi meu problema agora mesmo ....

questionKing
fonte
0

Primeiro, você precisa Fetchdo controle remoto (a ramificação específica) e, em seguida, pode criar um br local e rastreá-lo com essa ramificação remota usando seu comando (por exemplo, checkoutcom -b e --track).

Raheel Hasan
fonte
0

Você deve ir no diretório do submódulo e executar git status.

Você pode ver muitos arquivos foram excluídos. Você pode correr

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudles é o seu nome

  5. git submoudle add ....

knight2016
fonte
0

Você pode usar estes comandos: atualização remota do git, busca do git, verificação do git -b branch_nameA origem: branch_nameB

Eu acho que talvez seja por causa de sua filial local não pode rastrear filial remota

kang
fonte