Ответ 1
Решение заключалось в удалении ветки refs/heads/refs/heads/master
git push origin :refs/heads/refs/heads/master
Не спрашивайте меня, как мне удавалось случайно получить следующие удаленные ветки в репозитории git:
$ git branch -r
origin/HEAD -> origin/master
origin/master
origin/refs/heads/master
Все указывают на одно и то же сообщение. Как удалить ненужный список для origin/refs/heads/master
?
Я попытался сделать следующее
$ git push origin :refs/heads/master
error: dst refspec refs/heads/master matches more than one.
Но, как показано, это дает ошибку.
Решение заключалось в удалении ветки refs/heads/refs/heads/master
git push origin :refs/heads/refs/heads/master
На самом деле это не ветка на удаленном компьютере - это просто локальная ссылка, которая утверждает, что представляет что-то на пульте, так же, как origin/master представляет главную ветвь на пульте дистанционного управления. Полное имя ref refs/remotes/origin/refs/heads/master
. Все, что вам нужно сделать, чтобы удалить его:
git branch -r -d origin/refs/heads/master
Смутно возможно, что вам тоже удалось продвинуть это (но вам пришлось бы попробовать сделать это сложнее). Если бы вы это сделали, я бы просто перечислял ссылки источника:
git ls-remote origin
а затем, если там что-то глупо, используя git push origin :<refname>
, чтобы избавиться от него.
P.S. Если этого не сделать для вас, вы захотите использовать git for-each-ref
, чтобы просмотреть все ваши ссылки и, возможно, git ls-remote origin
, чтобы увидеть все удаленные, и точно определить, какие вещи не принадлежат, с их полностью квалифицированными refnames.
Это
git branch -r -d origin/ref/heads/master
вместо
git branch -r -d origin/refs/heads/master
в части кода для удаления ветки. В коде есть разница в слово ref.