Git говорит, что удаленный ref не существует, когда я удаляю удаленную ветку

132

Я побежал git branch -a

* master
  remotes/origin/test
  remotes/origin/master

Я хочу удалить свою удаленную ветку

я пробовал

git push origin --delete remotes/origin/test

я получил

ошибка: невозможно удалить «remotes / origin / test»: удаленная ссылка не существует

Как его не существует?

Я сделал git branch -aи увидел это в списке.

Я что-нибудь пропустил?

cyber8200
источник
1
git branch -aотобразит ветки на вашем локальном компьютере, а не на вашем удаленном. Правильно?
Я думаю обо всех. Я не уверена.
cyber8200
2
Он покажет удаленные ветки в вашем локальном. Он не будет перечислять все удаленные ветки.
1
@peterh Мне кажется, что он действительно спрашивает: «Почему я не могу удалить удаленную ветку» (возможно, когда ветка была удалена с пульта, но удаленная ссылка все еще присутствует локально) и, следовательно, не дубликат, но может делать с более четкое название
Эндрю Спенсер
1
Я отредактировал заголовок, надеюсь, это ближе к цели вопроса
Эндрю Спенсер

Ответы:

262

Команда git branch -aпоказывает удаленные ветки, существующие в вашем локальном репозитории . Это может показаться немного запутанным, но чтобы понять это, вы должны понимать, что существует разница между удаленной веткой и веткой, которая существует в удаленном репозитории. Удаленные ветки - это локальные ветки, которые сопоставляются с ветвями удаленного репозитория. Таким образом, набор удаленных ветвей представляет состояние удаленного репозитория.

Обычный способ обновить список удаленных веток - использовать git fetch. Это автоматически получает обновленный список ветвей с удаленного устройства и настраивает удаленные ветки в локальном репозитории, а также извлекает любые объекты фиксации, которые могут отсутствовать.

Однако по умолчанию git fetchне удаляет удаленные ветки, у которых больше нет ветки на удаленном компьютере. Для этого вам необходимо явно сократить список удаленных веток:

git fetch --prune

Это автоматически избавит от удаленных веток, которых больше нет на пульте. После git branch -rэтого вы увидите обновленный список веток, которые действительно существуют на пульте дистанционного управления: и те, которые вы можете удалить с помощью git push.

При этом, чтобы использовать git push --delete, вам нужно указать имя ветки в удаленном репозитории; не имя вашей удаленной ветки. Итак, чтобы удалить ветку test(представленную вашей удаленной веткой origin/test), вы должны использовать git push origin --delete test.

совать
источник
Также git branch -r | grep "origin"поможет с большими проектами, в которых используется форк
Сераф
Таким образом, есть две причины получить это сообщение от git: либо ветка уже была удалена на сервере, либо вы неправильно добавили к имени ветки префикс remotes/origin/. Или оба.
Эндрю Спенсер
137

Смысл в remotes/origin/testтом, что у вас есть ветка, вызываемая testна удаленном сервере origin. Итак, команда будет

git push origin --delete test
drosam
источник
25

Есть ярлык для удаления ветки в источнике:

git push origin :<branch_name>

Это то же самое, что и git push origin --delete <branch_name>

Рикардо Магальяйнс
источник
13
  1. получить список удаленных филиалов
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. вы должны получить список удаленных веток:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. теперь мы можем удалить ветку:
git push origin --delete deleteme
MovGP0
источник
11

git push origin --delete yourBranch

Матеус Марсильо
источник
4

Учитывая, что удаленная ветка - remotes / origin / test, вы можете использовать два способа:

git push origin --delete test

и

git branch -D -r origin/test
Симеон Мэттес
источник
3

Я последовал решению путем тыкания с незначительной корректировкой в ​​конце. Мои шаги следуют
- git fetch --prune;
- git branch -aпечать следующего
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(удаленная ветка для удаления)
- git push origin --delete branch.
Здесь удаляемая ветка не называется, а remotes/origin/branchпросто branch. И ветка удаляется.

Яньци Хуанг
источник
+1 за комментарий re: имя ветки, которое я пытался удалить, origin/branchхотя должно быть branch.
Кен
1

git branch -a будет перечислять ветки в вашем локальном, а не в удаленном.

И ошибка error: unable to delete 'remotes/origin/test': remote ref does not existозначает, что у вас нет ветки с таким именем на вашем удаленном компьютере, но ветка существует в вашем локальном.


источник
это полезно. это решило мою проблему удаления. Мне интересно, почему 'git push --delete origin / test' не сработало, а «git push --delete test» сработало
user10293779
1

Удобный однострочный инструмент для удаления веток, отличных от master, из источника:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

Убедитесь, что вы понимаете последствия этого, прежде чем делать это!

eddiewould
источник
спасибо за этот код! это единственный проверенный мной код git для удаления всех удаленных веток, кроме master.
Элвин
1

Для меня это сработало $ ▶ git branch -D -r origin / mybranch

подробности

$ ▶ git branch -a | grep mybranch пульты / происхождение / mybranch

$ ▶ git branch -r | grep mybranch origin / mybranch

$ ▶ git branch develop * функция / предварительное развертывание

$ ▶ git push origin --delete mybranch error: невозможно удалить mybranch: удаленная ссылка не существует ошибка: не удалось отправить некоторые ссылки на 'git@10.102.100.38: config / myrepo.git'

$ ▶ git branch -D -r origin / mybranch Удалена удаленная ветка origin / mybranch (было 62c7421).

$ ▶ git branch -a | grep mybranch

$ ▶ git branch -r | grep mybranch

Багги B
источник
-1
git push origin --delete origin/test 

тоже должно работать

Саджал Чуксе
источник
2
Это должно быть git push origin --delete test
Андреас Престхаммер