Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

git refname 'origin/master' is ambiguous

Tags:

git

git-svn

I have a git repository that is tracking several remote branches:

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

When I try to setup a default one I get the following error:

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

I would like to kremove some of the remote master branches but the master references are still there. How can I remove them to be able to set the default upstream branch to 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 
like image 508
gypaetus Avatar asked Sep 25 '14 19:09

gypaetus


People also ask

Is ambiguous git normally never creates a ref that ends with 40 hex characters?

Git normally never creates a ref that ends with 40 hex characters because it will be ignored when you just specify 40-hex. These refs may be created by mistake. For example, git checkout -b $br $(git rev-parse ...)

What is git branch command?

The git branch command lets you create, list, rename, and delete branches. It doesn't let you switch between branches or put a forked history back together again. For this reason, git branch is tightly integrated with the git checkout and git merge commands.


2 Answers

The output of git branch -a shows that you have a remote-tracking branch called origin/master. Perfectly normal.

However, the output of git show-ref master contains

6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master 

which indicates that you most likely ran something like the following low-level command:

git update-ref refs/origin/master master 

This command creates a branch (pointing at the same commit as master) called origin/master, but living directly under refs/, i.e. outside the refs/heads/ namespace, where local branches normally live. Quite suspicious... Did you mean to do that?

Such a branch won't get listed by git branch -a. Git is getting confused, though, because it sees two branches whose refnames end with origin/master:

  • refs/remotes/origin/master, your remote-tracking branch, and
  • refs/origin/master, the local branch that you created (by accident) outside refs/heads/.

Solution

If you did not mean to create refs/origin/master

Simply delete it:

git update-ref -d refs/origin/master 

Then, there won't be any ambiguity, and Git will comply when you try to set master's upstream.

If you did mean to create refs/origin/master

To avoid ambiguity, simply specify the full refname of the branch you wish to set as master's upstream:

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

To fix ideas, here is some code that reproduces the situation in one of my GitHub repos:

$ 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. 
like image 127
jub0bs Avatar answered Nov 08 '22 15:11

jub0bs


You probably accidentally created a local ref called 'origin/master'

for instance, if you did this

git branch origin/master 

It would lead to this problem. This one looks suspect "refs/origin/master". "refs/heads/master" is your local master, "refs/remotes/origin/master" is your remote branch reference, and "refs/origin/master" is probably a mistake that is screwing you up.

You just need to delete that reference (git update-ref -d ) and things will start working again.

like image 45
Andrew C Avatar answered Nov 08 '22 15:11

Andrew C