При видаленні віддаленої гілки git "помилка: неможливо натиснути на некваліфіковане місце призначення"


139

Я намагаюся видалити віддалену гілку git за допомогою

git push origin :my_remote_branch

і отримання:

error: unable to push to unqualified destination: my_remote_branch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@example.com:/myrepo'

це мої нинішні відділення

git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/my_remote_branch

git branch -r --merged
  origin/HEAD -> origin/master
  origin/develop
  origin/master

Були б вдячні будь-які ідеї, як я можу позбутися цієї галузі.


Ви спробували a, git fetchщоб перевірити, чи виправлено це неіснуюче віддалене ім’я? Ви намагалися зайти в свій .git\refs\remotes\originі видалити my_remote_branchфайл, щоб побачити, чи цього достатньо?
VonC

зробив, git fetchале це не допомогло. Постараємося знайти більш пряме рішення перед тим, як спробувати видалити файл вручну.
Гюго

спробуйте видалити або принаймні перемістити цей файл: він містить лише SHA1 кінчика цієї гілки.
VonC

45
Ви повинні зробити, git fetch -pщоб позбутися затоплених гілок стеження.
Ян Худек

Відповіді:


270

Те, що refs/remotes/origin/my_remote_branchіснує у вашому локальному сховищі, не означає, що refs/heads/my_remote_branchіснує у originвіддаленому сховищі.

Виконайте, git fetch -p originщоб refs/remotes/origin/my_remote_branchпіти, якщо це вже видалено в оригіналі. Цей -pпараметр пропонує отримати видалити будь-які гілки відстеження, яких більше немає у відповідних віддалених мережах; за замовчуванням вони зберігаються навколо.


12
git fetch -p originвиправили це для мене. Thx багато.
redimp

1
Ваша відповідь приголомшлива. Коротко і про суть!
інстинкт

обрізка не допомогла! в той час як git push origin --delete origin/feature/xдав мені помилку щодо відсутності ref git push origin :feature/x, видалив гілку. Тож я думаю, git push origin --delete <branchName>не слід включати походження у галузьName (?), Але це завершено в bash, що заплутано.
тире

@dashesy, ти опинився в іншій ситуації, ніж оригінальний запитувач. У первісному питанні проблема полягає в тому, що віддалену гілку вже видалили , імовірно, хтось інший, тому синхронізували лише локальну. Під час видалення пульта. Дійсно, команда повинна бути git push origin --delete feature/x, тому що ви даєте назву філії в нулі , і вона НЕ має цей префікс там (дві форми інакше синоніми в будь-якому випадку).
Ян Худек

@JanHudec має сенс. Bash complete є розумним при використанні, :щоб не включати, originале він завершується як origin/branch_nameзамість просто, branch_nameколи використовується --deleteваріант.
тире

56

Знайшло питання про очищення старих віддалених гілок гіта, і це зробило трюк

git branch -r -d origin/my_remote_branch

Я намагаюся зробити саме це вже близько години, спасибі велике!
sebkkom

Це не видаляє віддалену гілку. Якщо ви підете git fetch, ви знову побачите гілку. Просто видаліть його з вашого локального списку віддалених відділень.
Патрік Дежардінс

2
@PatrickDesjardins точно git push origin :my_remote_branchвидаляє гілку з віддаленого та git branch -r -d origin/my_remote_branchвидаляє її з мого локального списку віддалених гілок
Hugo

11

Я наткнувся на це, намагаючись видалити віддалену гілку, яка вже була видалена. Все, що було потрібно, - це чорнослив:

git remote prune origin

4

Спробуйте дотримуватися двох варіантів примусового видалення віддаленої гілки

Варіант 1

get push origin --delete <branchName>

Варіант 2

git fetch -p origin
git branch -r -d origin/<branchName>

3
git branch -r -d origin/my_remote_branch

мені було недостатньо. Перш ніж мені довелося перейти на сервер і безпосередньо працювати з каталогом git (що небезпечно і негарно), щоб видалити гілку:

ssh mygitserver
su - git
cd /home/git/repositories/my_remote_branch.git/
git  --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch

Це не просто небезпечно і некрасиво, але й неправильно . З одного боку, це питання про видалення гілки локально , коли він був видалений на віддаленому. А для інших - видалення гілки з віддаленого - лише справа git push origin :my_remote_branch. Розум товстої кишки.
Ян Худек

Ти правий Ян, git push origin :my_remote_branchце нормально. Цей некрасивий і небезпечний спосіб - це коли це не працює (наприклад, через неправильно налаштований git).
pevik

1

У мене схожа проблема. Спочатку пішов на цю дискусію, проте я не зміг вирішити проблему, поки не побачив https://stackoverflow.com/a/32147743/4209849 .

які просто додають підказку щодо розрізнення origin/my-branch-nameта my-branch-name.

Щоб бути конкретним, я повинен використовувати:

git push origin :my_remote_branch

замість

git push origin :origin/my_remote_branch

Принаймні, це вирішило мою проблему, сподіваюся, що це допоможе і іншим.


1

Для мене проблема полягала в тому, що це моя гілка за замовчуванням на github. Я змінив гілку за замовчуванням, після чого операцію видалення вдалося виконати.

Сподіваюсь, це комусь допомагає


0

Якщо ця проблема була такою, я вручну редагував свій ./.git/configфайл, щоб включити:

[branch "branchName"]
remote = origin
merge = refs/heads/branchName

У результаті чого: error: src refspec branchName matches more than one.Це я виправив, запустивши $git tag -d branchName. Після цього я зміг підштовхнути нову гілку до верхнього течії.


0

Це працювало для мене: я створив віддалену гілку в інтерфейсі github, а потім висунув свою локальну гілку, яка мала ту саму назву. Спробуйте, якщо інші способи не працюють. Іншим способом буде створення нової гілки на місцевому рівні та натискання на порожню гілку, а потім вишневе вибирання і знову натисніть на пульт.

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