web-dev-qa-db-fra.com

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

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

J'essaie d'aller chercher 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 vérifier le nom de l’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 créer un nouveau clone et extraire la branche.

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

460
Ikke

Je pense que cela se produit lorsque vous essayez de commander une branche distante dont votre référentiel git local n’a pas encore pris connaissance. Essayer:

git remote show Origin

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

git remote update
git fetch

Maintenant ça devrait marcher:

git checkout -b local-name Origin/remote-name
736
user167628

Syntaxe alternative,

git fetch Origin remote_branch_name:local_branch_name
148
Rare Pleasures

Après avoir essayé presque tout ce que je pouvais lire dans ce fil sans succès, je suis tombé sur celui-ci: La branche distante n'apparaît pas dans "git branch -r"

Il s'est avéré que mon fichier .git/config était incorrect. Après avoir fait un correctif 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 le tour

45
PålOliver

Vous ne savez pas si cela est utile ou tout à fait pertinent pour votre question, mais si vous essayez d'extraire et d'extraire uniquement une branche nique à partir 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
12
VirtualStaticVoid

aucune de ces solutions n'a fonctionné pour moi. Ma situation est légèrement différente, ma branche distante n’est pas à Origin. mais dans un référentiel différent.

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

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

Confirmé de travailler sur 1.7.5.4

11
Olivier Refalo

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 de la télécommande. Alors je pourrais faire

git checkout <branchname>

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

7
Matt

Je soupçonne qu’il n’ya pas de branche distante nommée nom-distant, mais que vous ayez créé par inadvertance une branche locale nommée Origine/nom-distant.

Est-il possible que vous ayez à un moment donné tapé:

 branche git Origine/nom-distant 

Ainsi, créer une branche locale nommée Origine/nom-distant? Tapez cette commande:

 git checkout Origine/nom-distant 

Vous verrez soit:

 Est passé à la branche "Origine/nom-distant" 

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

 Remarque: passage à "Origine/Nouvelle correction" qui ne soit pas une branche locale 
 Si vous souhaitez créer une nouvelle branche à partir de cette commande, vous pouvez le faire 
 ( maintenant ou plus tard) en utilisant -b avec la commande checkout à nouveau. Exemple: 
 Git checkout -b 

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

4
Don Branson

Ce n'est pas très intuitif mais cela fonctionne 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, lancez la commande git branch --track ...

  git branch --track $BRANCH Origin/$BRANCH
3
Eddie B

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

Utilisez git branch -a pour lister les branches distantes

2
Thomas

Après avoir récupéré des zillions de temps, les télécommandes encore ajoutées ne sont pas apparues, même si les gouttes étaient dans la piscine. Il s'avère que l'option - tags ne devrait pas être attribué à git remote add pour une raison quelconque. Vous pouvez le supprimer manuellement du fichier .git/config pour que git fetch crée les références.

1
eMPee584

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

c'est-à-dire: 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>]_ faisant référence au nom d'un commit à partir duquel démarrer la nouvelle branche, et _'Origin/remote-name'_ n'est pas cela.
    (alors que git branch supporte un point de départ étant le nom d'une branche distante)

Remarque: ce que le script checkout.sh dit est:

_  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 [] [nom_branch_distant] était en train de renommer la branche et de réinitialiser le nouveau point de départ de la nouvelle branche, ce qui est considéré comme incompatible.

1
VonC