"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.


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

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

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.


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

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

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.


4

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


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

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 ....


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).


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 ....


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.