git refname 'origin / master' est ambigu

j'ai un dépôt git qui suit plusieurs branches distantes:

$ git branch -a
* master
  remotes/git-svn
  remotes/origin/master
  remotes/trunk

Lorsque j'essaie de configurer un défaut, j'obtiens l'erreur suivante:

$ git branch --set-upstream-to=origin/master master
warning: refname 'origin/master' is ambiguous.
fatal: Ambiguous object name: 'origin/master'.

je voudrais kremove certaines des branches de maître distantes mais les références de maître sont toujours là. Comment puis-je les supprimer pour pouvoir définir la branche amont par défaut à origin/master?

$ git show-ref master
cba97a58c99743c355b569bbf35636c8823c2d96 refs/heads/master
6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master
d83f025cd3800ed7acd76b2e52ae296e33f1cd07 refs/original/refs/heads/master
cba97a58c99743c355b569bbf35636c8823c2d96 refs/remotes/origin/master
38
demandé sur jubobs 2014-09-25 23:37:21

3 réponses

La sortie de git branch -a montre que vous avez une branche de suivi à distance appelée origin/master. Parfaitement normal.

cependant, la sortie de git show-ref master contient

6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master

ce qui indique que vous avez probablement exécuté quelque chose comme la commande de bas niveau suivante:

git update-ref refs/origin/master master

Cette commande crée une branche (pointant sur la même livraison que master)origin/master, mais vivant directement sous refs/, i.e. dehorsrefs/heads/ namespace, où les branches locales vivent normalement. Assez méfiant... Avez-vous l'intention de faire?

une telle branche ne sera pas listée par git branch -a. Git se confond, cependant, parce qu'il voit deux branches dont les noms se terminent par origin/master:

  • refs/remotes/origin/master, votre branche de suivi à distance, et
  • refs/origin/master, la branche locale que vous avez créée (par accident) à l'extérieur de refs/heads/.

Solution

Si vous n'avez moyenne de créer refs/origin/master

il suffit de le supprimer:

git update-ref -d refs/origin/master

alors, il n'y aura pas d'ambiguïté, et Git se conformera quand vous essayez de définir master's en amont.

si vous avez l'intention de créer refs/origin/master

pour éviter toute ambiguïté, spécifiez simplement le refname de la branche que vous souhaitez définir comme master's en amont:

git branch --set-upstream-to=refs/remotes/origin/master master

Pour fixer les idées, voici un code qui reproduit la situation dans un de mes repos GitHub:

$ cd ~/Desktop
$ git clone https://github.com/Jubobs/gitdags && cd gitdags

$ git update-ref refs/origin/master

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

$ git show-ref master
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/heads/master
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/origin/master
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/remotes/origin/HEAD
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/remotes/origin/master

$ git branch --set-upstream-to=origin/master master
warning: refname 'origin/master' is ambiguous.
fatal: Ambiguous object name: 'origin/master'.

$ git update-ref -d refs/origin/master
$ git branch --set-upstream-to=origin/master master
Branch master set up to track remote branch master from origin.
56
répondu jubobs 2018-06-11 07:18:33

Vous avez probablement accidentellement créé un ref local appelé 'origin / master'

par exemple, si vous avez fait ceci

git branch origin/master

Il serait conduire à ce problème. Celui-ci semble suspect "refs/origin/master". "refs/heads/master" est votre maître, "refs/remotes/origin/master" est votre branche distante de référence, et "refs/origin/master" est probablement une erreur que vous visse.

Vous avez juste besoin de supprimer cette référence, et les choses vont commencer à travailler encore.

17
répondu Andrew C 2014-09-25 19:50:23

j'ai eu un problème très similaire à cause d'une étiquette accidentelle nommée "master", apparaissant dans git show-ref masterrefs/tags/master. La solution dans ce cas est:

git tag -d master
3
répondu rymo 2016-03-14 05:21:38