Подтвердить что ты не робот

Git refname 'origin/master' неоднозначно

У меня есть репозиторий git, который отслеживает несколько удаленных ветвей:

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

Когда я пытаюсь настроить по умолчанию, я получаю следующую ошибку:

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

Я хотел бы удалить некоторые удаленные главные ветки, но основные ссылки все еще существуют. Как удалить их, чтобы установить ветку по умолчанию по умолчанию на 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
4b9b3361

Ответ 1

Вывод git branch -a показывает, что у вас есть ветвь удаленного отслеживания, называемая origin/master. Совершенно нормально.

Однако вывод git show-ref master содержит

6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master

который указывает, что вы, скорее всего, выполнили что-то вроде следующей команды нижнего уровня:

git update-ref refs/origin/master master

Эта команда создает ветку (указывающую на то же сообщение, что и master), называемое origin/master, но живущая непосредственно под refs/, то есть вне пространства имен refs/heads/, где обычно живут локальные ветки. Вы хотели сделать это?

Такая ветка не будет указана в git branch -a. Однако Git запутывается, потому что он видит две ветки, чьи образы заканчиваются на origin/master:

  • refs/remotes/origin/master, ветвь удаленного отслеживания и
  • refs/origin/master, локальная ветвь, созданная вами (случайно) вне refs/heads/.

Решение

Если вы не хотели создавать refs/origin/master

Просто удалите его:

git update-ref -d refs/origin/master

Тогда не будет никакой двусмысленности, и Git будет соответствовать, когда вы попытаетесь установить master вверх по течению.

Если вы действительно хотели создать refs/origin/master

Чтобы избежать двусмысленности, просто укажите полное имя ветки, которую вы хотите установить как master вверх по течению:

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

Чтобы исправить идеи, вот какой код, который воспроизводит ситуацию в одном из моих репозиториев 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.

Ответ 2

Вероятно, вы случайно создали локальный номер ref, названный 'origin/master'

например, если вы сделали это

git branch origin/master

Это приведет к этой проблеме. Это выглядит подозрительно "refs/origin/master". "refs/heads/master" является вашим местным мастером, "refs/remotes/origin/master" - это ваша ссылка на удаленный филиал, а "refs/origin/master", вероятно, является ошибкой, которая вас задевает.

Вам просто нужно удалить эту ссылку, и все снова начнет работать.

Ответ 3

У меня была очень похожая проблема из-за случайного тега с именем "master", отображаемого в git show-ref master как refs/tags/master. Исправление в этом случае было:

git tag -d master