Git checkout: la mise à jour des chemins est incompatible avec le changement de branche

467

Mon problème est lié à l' erreur Fatal Git lors du changement de branche .

J'essaye de récupérer une branche distante avec la commande

git checkout -b local-name origin/remote-name

mais je reçois ce message d'erreur:

fatal: git checkout: la mise à jour des chemins est incompatible avec le changement de branche.
Avez-vous l'intention de retirer 'origine / nom distant' qui ne peut pas être résolu en tant que commit?

Si je crée manuellement une branche, puis que je tire la branche distante, cela fonctionne, tout comme la création d'un nouveau clone et l'extraction de la branche.

Pourquoi cela ne fonctionne-t-il pas sur le référentiel avec lequel je travaille?

Ikke
la source
1
qu'est-ce qui a changé depuis la première instance de cette commande (déclenchant le message d'erreur)?
VonC
git init git fetch git fetch git: //blabla.com/dir1/Project.git

Réponses:

739

Je crois que cela se produit lorsque vous essayez de vérifier une branche distante dont votre dépôt git local n'est pas encore au courant. Essayer:

git remote show origin

Si la branche distante que vous souhaitez extraire se trouve sous "Nouvelles branches distantes" et non "Branches distantes suivies", vous devez d'abord les récupérer:

git remote update
git fetch

Maintenant, cela devrait fonctionner:

git checkout -b local-name origin/remote-name
user167628
la source
7
Cela a résolu le problème pour moi, pas la réponse arbitraire ci-dessus.
Jessedc
21
Cela devrait être "git fetch REPOSITORY_NAME" pour obtenir toutes les branches de ce référentiel.
Mike Thomsen
1
pas nécessairement. git fetchobtiendra toutes les branches de tous les dépôts distants.
Michael Grinich
4
Dans le cas où quelqu'un d'autre se débat avec la folie totale de tout cela: git fetch origin / branchname Ce n'est pas la même chose que git fetch. Le premier se traduit simplement par "nouveau (la prochaine extraction sera stockée dans les télécommandes / origine)" s'affiche dans une colonne visible via git remote show origin.
Alexander Kellett
7
Si vous essayez de le faire pour une télécommande que vous avez explicitement ajoutée (donc autre chose que l'origine ), vous devrez le faire git remote updateavant que votre extraction ne récupère cette télécommande. Sinon, vous obtenez des messages comme Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?s'il vous plaît ajoutez ceci à la réponse et économisez des heures aux gens en lisant les mêmes réponses qui ne fonctionnent que pour l'origine.
Bruno Bronosky
150

Syntaxe alternative,

git fetch origin remote_branch_name:local_branch_name
Plaisirs rares
la source
12
Cela a fonctionné pour moi. Mon nom de succursale distante n'est pas d'origine. Je ne sais pas si cela fait une différence car je bois de la vodka.
Rimian
13
Ce n'est pas seulement une syntaxe alternative, mais peut fonctionner lorsque git checkout -b origin_name / branch_name ne fonctionne pas
codercake
1
Cela a également résolu mon problème lors de l'exécution de "git checkout --track origin / remote-branch", qui à l'origine donnait la même erreur que OP avant le correctif. Merci!
kakyo
1
A fonctionné pour moi après avoir exécuté également la réponse validée.
AsTeR
2
Oui, je soupçonne que le --depthqualificatif du clone d'origine peut être en cause ici. J'ai réussi, git fetch remote_branch_name:local_branch_namemais tous les autres conseils ont échoué.
John Kelleher
46

Après avoir essayé la plupart de ce que j'ai pu lire dans ce fil sans succès, je suis tombé sur celui-ci: la branche distante ne s'affiche pas dans "git branch -r"

Il s'est avéré que mon fichier .git / config était incorrect. Après avoir effectué une correction simple, toutes les branches sont apparues.

Venir de

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

à

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

A fait l'affaire

PålOliver
la source
4
C'est en effet une configuration étrange. Il indique à git de ne récupérer la branche principale que depuis la télécommande.
Ikke
3
Je voterais 10 fois si je le pouvais! - cela semble être quelque chose que le nouveau git fait lors du clonage
mpapis
2
J'ai eu le même problème, ça me rendait fou. Quiconque ne voit pas de succursales distantes, veuillez vérifier ceci !!
Carlos Granados
Dieu merci pour votre réponse :)
Sacha
Esprit = soufflé! Je vous remercie!
Chiranjib
12

Je ne sais pas si cela est utile ou exactement pertinent pour votre question, mais si vous essayez de récupérer et d'extraire uniquement une seule branche du référentiel distant, les commandes git suivantes feront l'affaire:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch
VirtualStaticVoid
la source
11

rien de ce qui précède n'a fonctionné pour moi. Ma situation est légèrement différente, ma branche distante n'est pas à l' origine . mais dans un référentiel différent.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

astuce: si vous ne voyez pas la branche distante dans la sortie suivante, git branch -v -ail n'y a aucun moyen de la vérifier.

Travail confirmé sur 1.7.5.4

Olivier Refalo
la source
arf, réalisez que VirtualStaticVoid avait la même solution!
Olivier Refalo
+1 pour git branch -v -a: j'avais une télécommande mal configurée qui disait fetch = +refs/heads/*:refs/remotes/master/*même si la télécommande était appelée upstream.
keflavich
7

Pour moi, ce qui a fonctionné a été:

git fetch

Ce qui tire toutes les références vers votre machine pour toutes les branches sur la télécommande. Alors je pourrais faire

git checkout <branchname>

et cela a parfaitement fonctionné. Similaire à la réponse la plus votée, mais un peu plus simple.

Mat
la source
4

Je soupçonne qu'il n'y a pas de branche distante nommée nom-distant, mais que vous avez créé par inadvertance une branche locale nommée origine / nom-distant.

Est-il possible à un moment donné de taper:

git branch origin / remote-name

Ainsi, créer une branche locale nommée origin / remote-name? Tapez cette commande:

git checkout origin / remote-name

Vous verrez soit:

Passé à la branche "origine / nom distant"

ce qui signifie que c'est vraiment une branche locale mal nommée, ou

Remarque: passer à "origin / rework-isscoring" qui n'est pas une branche locale
Si vous souhaitez créer une nouvelle branche à partir de cette caisse, vous pouvez le faire
(maintenant ou plus tard) en utilisant à nouveau -b avec la commande checkout. Exemple:
  git checkout -b 

ce qui signifie que c'est vraiment une branche distante.

Don Branson
la source
3

Ce n'est pas très intuitif mais ça marche bien pour moi ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

ALORS exécutez la commande git branch --track ...

  git branch --track $BRANCH origin/$BRANCH
Eddie B
la source
2

Pour moi j'avais une faute de frappe et ma branche distante n'existait pas

Utiliser git branch -apour lister les branches distantes

Thomas
la source
1

Votre problème pourrait-il être lié à cette autre question SO "problème de paiement" ?

ie: un problème lié à:

  • une ancienne version de Git
  • une syntaxe de commande curieuse, qui devrait être: git checkout -b [<new_branch>] [<start_point>]avec [<start_point>]référence au nom d'un commit à laquelle pour commencer la nouvelle branche, et 'origin/remote-name'n'est pas.
    (alors que git branchprend en charge un start_point étant le nom d'une branche distante)

Remarque: ce que dit le script checkout.sh :

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

C'est comme si la syntaxe git checkout -b [] [remote_branch_name] était à la fois renommer la branche et réinitialiser le nouveau point de départ de la nouvelle branche, ce qui est jugé incompatible.

VonC
la source
Le problème est résolu. git checkout -b nom-local remote / remote-branch fonctionne réellement
Ikke
1
Intéressant, qu'est-ce qui a changé depuis la première instance de cette commande (déclenchant le message d'erreur)?
VonC
1

Après avoir récupéré un million de fois, des télécommandes ajoutées ne sont pas apparues, même si les taches étaient dans la piscine. Il s'avère que l' option --tags ne doit pas être donnée git remote addpour une raison quelconque. Vous pouvez le supprimer manuellement du fichier .git / config pour que git fetch crée les références.

eMPee584
la source