"Impossible de mettre à jour les chemins et de basculer vers la branche en même temps"

188

J'utilise parfois l' checkout -boption pour créer une nouvelle branche, la vérifier en même temps et configurer le suivi en une seule commande.

Dans un nouvel environnement, j'obtiens cette erreur:

$ 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?

Pourquoi Git n'aime-t-il pas ça? Cela fonctionnait avec le même repo.

émerveillé
la source
6
Le message d'erreur vous indique qu'il origin/masterne s'agit pas d'un ID de validation, c'est-à-dire qu'il ne s'agit pas d'une branche distante valide. Cela apparaît-il dans la git branch -rsortie?
torek
Ça n'a pas été le cas. Il s'avère que je n'ai pas vérifié toutes les branches distantes pendant le clonage.
marekful

Réponses:

202

' origin/master' qui ne peut pas être résolu comme commit

Étrange: vous devez vérifier vos télécommandes:

git remote -v

Et assurez-vous qu'il originest récupéré:

git fetch origin

Ensuite:

git branch -avv

(pour voir si vous avez récupéré une origin/masterbranche)

Enfin, utilisez à la git switchplace de la confusiongit checkout , avec Git 2.23+ (août 2019).

git switch -c test --track origin/master
VonC
la source
11
J'ai eu une faute de frappe dans ma commande qui a déclenché cette erreur; Je n'épelais pas correctement ma télécommande!
qix
2
C'était une nouvelle branche et mon dépôt local ne le savait pas. J'ai dû faire un pullet puis cette commande a fonctionné.
coding_idiot
2
Cette réponse a été utile car elle m'a montré qu'il se passait vraiment quelque chose de bizarre: les télécommandes sont réglées correctement, mais la nouvelle branche distante n'est tout simplement pas récupérée. Lorsque je clone la télécommande dans un répertoire propre, cela fonctionne. Mon .gitrépertoire pourrait-il être corrompu d'une manière ou d'une autre?
Konrad Rudolph
git remote -v a renvoyé cette erreur fatale: nom d'objet non valide: 'remote'.
Karim Samir
@KarimSamir, vous pouvez poser une question distincte (avec votre système d'exploitation et votre version git), comme git remote -vexécuté dans un dépôt git fonctionne.
VonC
80

FWIW: Si vous avez une faute de frappe dans votre nom de branche, vous obtiendrez la même erreur.

Ludder
la source
4
En fait, ce serait bien si quelqu'un pouvait prendre le temps d'en parler aux développeurs Git, le message d'erreur n'est pas très informatif;)
Scorchio
8
oui, c'était mon problème, j'avais un espace dans le nom de ma succursale
Karim Samir
Même chose ici, j'essayais git checkout -b origin mybranchau lieu de git checkout -b mybranch(extra origin)
Guillaume Renoult
J'ai copié-collé le nom de ma branche et j'avais un espace après le nom de la branche qui a causé cette erreur.
learningKnight
J'essayais de payer orgin/my-branchau lieu de origin/my-branch. iJ'en ai manqué un et j'ai continué à me gratter la tête pendant un moment pour comprendre pourquoi un vieil allié refuse de s'entendre. La faute de frappe était en effet le problème.
DDM
56

Vous pouvez obtenir cette erreur dans le contexte, par exemple, d'une construction Travis qui, par défaut, extrait le code avec git clone --depth=50 --branch=master. À ma connaissance, vous pouvez contrôler --depthvia .travis.ymlmais pas le --branch. Étant donné que cela entraîne le suivi d'une seule branche par la télécommande, vous devez mettre à jour indépendamment la télécommande pour suivre les références de la télécommande souhaitée.

Avant:

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

Le correctif:

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

Après:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master
Bob Aman
la source
5
Résolu pour moi. J'ai utilisé un clone peu profond --depth = 1 et c'est ce dont j'avais besoin pour changer de branche.
Sawtaytoes
1
Gah oui, la profondeur entraîne définitivement cette erreur! Si possible, je suggérerais que les premières phrases soient éditées pour mettre l'accent sur la profondeur.
Dubslow
23

Cette chose simple a fonctionné pour moi!

S'il dit qu'il ne peut pas faire 2 choses en même temps, séparez-les.

git branch branch_name origin/branch_name 

git checkout branch_name
Ashwini Reddy
la source
Il est facile de découvrir quel est le vrai problème
Bernardo Dal Corno
10

Vous pouvez suivre ces étapes lorsque vous tombez sur ce problème:

  1. Exécutez la commande suivante pour répertorier les branches connues de votre référentiel local.

git remote show origine

qui produit ceci:

 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. Après avoir vérifié les détails tels que (récupérer l'URL, etc.), exécutez cette commande pour récupérer toute nouvelle branche (c'est-à-dire que vous voudrez peut-être récupérer dans votre dépôt local) qui existe dans la télécommande mais pas dans votre local.
» git remote update

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

Comme vous pouvez le voir, la nouvelle branche a été récupérée à distance.
3. Enfin, vérifiez la branche avec cette commande

» git checkout -b Feature3 origin/Feature3

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

Il n'est pas nécessaire de dire explicitement à Git de suivre (en utilisant --track ) la branche avec remote.

La commande ci-dessus définira la branche locale pour suivre la branche distante depuis l'origine.

ssasi
la source
5

Si vous avez un espace blanc dans votre branche, vous obtiendrez cette erreur.

dansek
la source
1

Pour moi, j'avais besoin d'ajouter la télécommande:

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

alors je pourrais aller chercher

git fetch myRemoteName
RayLoveless
la source
1

Cela fait que votre branche locale ne suit pas la branche distante. Comme ssasi l'a dit, vous devez utiliser ces commandes:

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

J'ai résolu mon problème tout à l'heure ...

questionKing
la source
0

Vous avez d'abord besoin de Fetchla branche distante (la branche spécifique), puis vous pouvez créer un br local et le suivre avec cette branche distante en utilisant votre commande (c'est- checkoutà- dire avec -b et --track).

Raheel Hasan
la source
0

Vous devriez aller dans le répertoire du sous-module et exécuter git status.

Vous pouvez voir que beaucoup de fichiers ont été supprimés. Vous pouvez courir

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudles est votre nom

  5. git submoudle add ....

chevalier2016
la source
0

Vous pouvez utiliser ces commandes: git remote update, git fetch, git checkout -b branch_nameA origin: branch_nameB

Je pense que c'est peut-être à cause de votre succursale locale ne peut pas suivre la succursale distante

kang
la source