При видаленні віддаленої гілки 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.