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
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, etrefs/origin/master
, la branche locale que vous avez créée (par accident) à l'extérieur derefs/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.
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.
j'ai eu un problème très similaire à cause d'une étiquette accidentelle nommée "master", apparaissant dans git show-ref master
refs/tags/master
. La solution dans ce cas est:
git tag -d master