Git каже, що віддаленого відліку немає, коли я видаляю віддалену гілку


130

Я побіг git branch -a

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

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

Я намагався

git push origin --delete remotes/origin/test

я отримав

помилка: не вдається видалити 'Remotes / origin / test': віддалений перелік не існує

Як його не існує?

Я зробив це git branch -a, і я побачив це в списку.

Я щось пропустив?


1
git branch -aвідобразить гілки у вашому локальному, а не з віддаленого. Правильно?

Я думаю, що всі вони. Я не впевнений.
cyber8200

2
Він покаже віддалені відділення у вашому локальному регіоні. У ньому не буде перераховано всі віддалені гілки.

1
@peterh Мені здається, що це справді запитує "чому я не можу видалити віддалену гілку" (можливо, коли гілка була видалена з віддаленого, але віддалений номер все ще присутній локально), отже, це не дублікат, але міг би робити з чіткіша назва
Ендрю Спенсер

1
Я змінив назву, сподіваюсь, це ближче до наміру питання
Ендрю Спенсер

Відповіді:


259

Команда 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"допоможуть великі проекти, які використовують вилку
Seraf

Отже, є 2 причини отримати це повідомлення від git: або гілка вже видалена на сервері, або ви неправильно встановили ім'я гілки remotes/origin/. Або і те й інше.
Ендрю Спенсер

136

Сенс remotes/origin/testполягає в тому, що у вас є відділення, яке називається testна віддаленому сервері origin. Отже команда була б

git push origin --delete test

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


4

З огляду на те, що віддалене відділення є віддаленим / походженням / тестом, ви можете скористатися двома способами:

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 для коментаря про: ім'я філії, я намагався видалити, origin/branchколи це просто має бути branch.
кен

1

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

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


це корисно. це вирішило мою проблему видалення. мені цікаво, чому "git push --delete походження / тест" не працював, тоді як "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}

Будьте впевнені, що ви розумієте наслідки цього, перш ніж робити це!


дякую за цей код! це єдиний git-код, який я перевіряв, працюючи над видаленням усіх віддалених гілок, крім головного.
Альвін

1

Для мене це працювало $ ▶ git гілка -D -r походження / mybranch

Деталі

$ ▶ git гілка -a | grep mybranch remote / origin / mybranch

$ ▶ git гілка -r | grep mybranch походження / mybranch

$ ▶ відділення git розробити * функцію / попереднє розгортання

$ ▶ походження git push - видалити помилку mybranch: не вдається видалити 'mybranch': віддалений ref не існує помилки: не вдалося натиснути деякі рецензії на 'git@10.102.100.38: config / myrepo.git'

$ ▶ гілка git -D -r походження / mybranch Видалено віддалене походження гілки / mybranch (було 62c7421).

$ ▶ git гілка -a | grep mybranch

$ ▶ git гілка -r | grep mybranch


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.